В 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'),
]