Ich experimentiere mit Django und finde heraus, wie man urls.py setzt und wie die URLs funktionieren . Ich habe urls.py im Stammverzeichnis des Projekts konfiguriert, um zu meinem Blog und Admin zu verweisen .. .Aber jetzt möchte ich eine Seite zu meinem Haus hinzufügen, also bei localhost: 8000.
Ich habe also folgenden Code zu urls.py im Stammverzeichnis des Projekts hinzugefügt:
from Django.views.generic.simple import direct_to_template
urlpatterns = patterns('',
(r"^$", direct_to_template, {"template": "base.html"}),
)
Das Problem ist, dass es nach der Vorlage in blog/templates /....__ sucht. Statt dem Vorlagenordner in meinem Stammverzeichnis. Welches enthält die base.html
volle urls.py:
from Django.conf.urls import patterns, include, url
from Django.views.generic.simple import direct_to_template
# Uncomment the next two lines to enable the admin:
from Django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
(r"^$", direct_to_template, {"template": "base.html"}),
url(r'^blog/', include('hellodjango.blog.urls')),
url(r'^admin/doc/', include('Django.contrib.admindocs.urls')),
url(r'^admin/', include(admin.site.urls)),
(r'^tinymce/', include('tinymce.urls')),
)
BEARBEITEN: vollständige urls.py hinzugefügt :)
Übersehe ich etwas?
Haben Sie TEMPLATE_DIRS
in Ihrem settings.py
eingestellt? Überprüfen Sie und stellen Sie sicher, dass es mit absoluten Pfaden richtig eingerichtet ist. So stelle ich sicher, dass es richtig eingestellt ist:
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/Django_templates" or "C:/www/Django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
os.path.join(PROJECT_ROOT, 'templates').replace('\\','/'),
)
# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
'Django.template.loaders.filesystem.Loader',
'Django.template.loaders.app_directories.Loader',
# 'Django.template.loaders.eggs.Loader',
)
Auf diese Weise habe ich einen templates
-Ordner in meinem Projektstammverzeichnis, der für Nicht-App-Vorlagen verwendet wird, und jede App hat einen templates/appname
-Ordner in der App selbst.
Wenn Sie eine Vorlage aus dem Stammvorlagenordner verwenden möchten, geben Sie einfach den Namen der Vorlage an, beispielsweise 'base.html'
. Wenn Sie eine App-Vorlage verwenden möchten, verwenden Sie 'appname/base.html'
.
Ordnerstruktur:
project/
appname/
templates/
appname/ <-- another folder with app name so 'appname/base.html' is from here
base.html
views.py
...
templates/ <-- root template folder so 'base.html' is from here
base.html
settings.py
views.py
...
from Django.conf.urls import patterns, include, url
# Uncomment the next two lines to enable the admin:
from Django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^blog/', include('hellodjango.blog.urls')),
url(r'^admin/doc/', include('Django.contrib.admindocs.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^tinymce/', include('tinymce.urls')),
)
urlpatterns += patterns(
'Django.views.generic.simple',
(r'^', 'direct_to_template', {"template": "base.html"}),
)
Ich würde die URLs als solche neu organisieren:
urlpatterns = patterns('',
(r'^admin/doc/', include('Django.contrib.admindocs.urls')),
(r'^admin/', include(admin.site.urls)),
(r'^tinymce/', include('tinymce.urls')),
(r'^blog/', include('hellodjango.blog.urls')),
(r'^$', direct_to_template, {"template": "base.html"}),
)
Die Muster entsprechen ihrer Spezifität, daher neige ich dazu, die spezifischeren Muster an erster Stelle zu setzen. Ansonsten sehen Sie möglicherweise unerwartetes Verhalten. Probieren Sie es aus, und wenn es noch eine Vorlage aus Ihrem Blog lädt, die /
-Anforderung enthält, werden wir ausführlicher vorgehen.
Ich denke, es hängt davon ab, was Ihre Homepage sein soll. Wenn es sich einfach um eine Seite mit Links zu anderen Teilen Ihrer Website handelt, dann ist catherine's answer eine schöne saubere Methode.
Wenn Sie möchten, dass der Stamm Ihrer Website beispielsweise Ihr Blog ist, würde ich Folgendes tun:
urlpatterns = patterns('',
# Django Admin
url(r'^admin/', include(admin.site.urls)),
# Tiny MCE Urls
url(r'^tinymce/', include('tinymce.urls')),
# Other App
url(r'^other/', include('projectname.other.urls', namespace='other')),
# Blog App
url(r'^', include('projectname.blog.urls', namespace='blog')),
)
Vergessen Sie auch nicht, den Platz für Ihre URL anzugeben: https://docs.djangoproject.com/en/dev/topics/http/urls/#url-namespaces