В Django, как вы пишете шаблон url для '/' и других корневых URL-адресов
Я новичок в django, и одна из вещей, которые я все еще изучаю, - url_patterns. Я создал приложение для страниц, чтобы обрабатывать корневой путь (http://www.mysite.com), а также некоторые статические страницы, например, о странице. Я понял, как настроить шаблон url для корневого пути, но я не могу заставить сайт направлять путь "/about" к страницам "about".
Вот мой главный urls.py
from django.conf.urls import patterns, include, url
from django.conf import settings
urlpatterns = patterns('',
url(r'^polls/', include('polls.urls')),
url(r'^$', 'pages.views.root'),
url(r'^/', include('pages.urls')),
)
вот мои страницы urls.py
from django.conf.urls import patterns, include, url
urlpatterns = patterns('pages.views',
url(r'^about', 'about'),
)
Вот мои страницы views.py
# Create your views here.
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.http import HttpResponse, HttpResponseRedirect
from django.core.urlresolvers import reverse
def root(request):
return render_to_response('pages/root.html',context_instance=RequestContext(request))
def about(request):
return render_to_response('pages/about.html',context_instance=RequestContext(request))
Если я изменил основной файл urls.py на r'^a/', include('pages.urls')
, тогда путь "/a/about" будет перенаправлен на действие about. Поэтому я думаю, что это должно быть проблемой в том, как я пишу url в этом файле. Но я не могу понять, как это изменить. Может ли кто-нибудь помочь?
Ответы
Ответ 1
Выяснил, в чем проблема. Правильный url_pattern на уровне проекта:
urlpatterns = patterns('',
url(r'^polls/', include('polls.urls')),
url(r'^$', 'pages.views.root'),
url(r'', include('pages.urls')),
)
Когда это на месте, "/about" и другие простые пути направляются правильно.
Спасибо всем!
Ответ 2
Попробуйте это, для url.py на уровне проекта:
urlpatterns = patterns('',
# Examples:
url(r'^$', 'apps_name.views.home', name='home'),
# Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
(r'^about/', include('about.urls')),
)
а затем url.py для приложения около
urlpatterns = patterns('',
url(r'^$', direct_to_template, {"template": "about/about.html"}, name="about"),
)
Учитывайте, что регулярное выражение оценивается сверху вниз, а затем, если путь соответствует регулярному выражению, он будет вводиться. Чтобы узнать больше о regexp google, попробуйте отличную книгу от Zed Shaw о regexps
Ответ 3
Обратите внимание, что из версии Django 2.0 шаблон URL был изменен для использования django.urls.path()
Пример проверки здесь: ссылка
from django.urls import path
from . import views
urlpatterns = [
# ex: /polls/
path('', views.index, name='index'),
# ex: /polls/5/
path('<int:question_id>/', views.detail, name='detail'),
# ex: /polls/5/results/
path('<int:question_id>/results/', views.results, name='results'),
# ex: /polls/5/vote/
path('<int:question_id>/vote/', views.vote, name='vote'),
]