J'expérimente avec Django et cherche à définir comment définir urls.py et comment les urls fonctionnent .J'ai configuré urls.py à la racine du projet pour diriger mon blog et mon administrateur ..__ Mais maintenant, je veux ajouter une page à ma maison, donc à localhost: 8000.
J'ai donc ajouté au code suivant l'urls.py à la racine du projet:
from Django.views.generic.simple import direct_to_template
urlpatterns = patterns('',
(r"^$", direct_to_template, {"template": "base.html"}),
)
Le problème est qu’il recherche le modèle dans blog/templates /... Au lieu du dossier des modèles dans ma racine. Qui contient la base.html
urls.py complet:
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')),
)
EDIT: ajouté complète urls.py :)
Est-ce que je néglige quelque chose?
Avez-vous défini TEMPLATE_DIRS
dans votre settings.py
? Vérifiez et assurez-vous qu'il est correctement configuré avec les chemins absolus. Voici comment je m'assure qu'il est correctement configuré:
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',
)
De cette façon, j'ai un dossier templates
dans la racine de mon projet utilisé pour les modèles non-app et chaque application a un dossier templates/appname
à l'intérieur de l'application elle-même.
Si vous souhaitez utiliser un modèle à partir du dossier de modèles racine, vous devez simplement donner le nom du modèle tel que 'base.html'
et si vous souhaitez utiliser un modèle d'application, vous utilisez 'appname/base.html'
.
Structure du dossier:
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"}),
)
Je réorganiserais les urls en tant que tels:
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"}),
)
Les motifs correspondent à leurs spécificités, j'ai donc tendance à donner la priorité aux motifs les plus spécifiques. Sinon, vous pourriez voir un comportement inattendu. Essayez-le, et s'il charge toujours un modèle de votre blog avec une demande de /
, nous allons creuser plus profondément.
Je pense que cela dépend de ce que vous voulez que votre page d'accueil soit. Si c'est simplement une page avec des liens vers d'autres parties de votre site, alors catherine's answer est un moyen propre et agréable.
Si vous voulez que la racine de votre site soit votre blog par exemple, je le ferais:
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')),
)
N'oubliez pas également de nommer space votre url comprend: https://docs.djangoproject.com/en/dev/topics/http/urls/#url-namespaces