web-dev-qa-db-ja.com

Djangoでは、「/」およびその他のルートベースのURLのURLパターンをどのように記述しますか

私はDjangoを使い始めたばかりで、まだ学んでいることの1つはurl_patternsです。ルートパス(http://www.mysite.com)とaboutページなどの静的ページを処理するようにページアプリを設定しました。ルートパスの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パターン。しかし、それを変更する方法がわかりません。誰か助けてもらえますか?

18
jay

問題が何であるかを理解しました。プロジェクトレベルでの適切なurl_patternは次のとおりです。

 urlpatterns = patterns('',
    url(r'^polls/', include('polls.urls')),
    url(r'^$', 'pages.views.root'),
    url(r'', include('pages.urls')),
 )

これが設定されている場合、「/ about」およびその他の単純なパスが適切に指示します。

みんな、ありがとう!

29
jay

プロジェクトレベルの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"),
)

正規表現が上から下に評価されることを考慮に入れ、パスが正規表現に適合する場合は、その正規表現が入力されます。正規表現の詳細についてはgoogle itを参照するか、Zed Shawのすばらしい本 regexps を試してください。

6
jdcaballerov

Djangoバージョン2.0以降、URLパターンがDjango.urls.path()を使用するように変更されました。ここで例を確認してください。 link

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