21

我是 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 模式的方式的问题。但是,我不知道如何改变它。任何人都可以帮忙吗?

4

4 回答 4

34

弄清楚问题是什么。项目级别的正确 url_pattern 是:

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

当它到位时,'/about' 和其他简单路径会正确定向。

感谢大家!

于 2012-10-16T16:03:48.763 回答
7

试试这个,对于项目级别的 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"),
)

考虑到正则表达式是从上到下评估的,那么如果路径适合它将进入的正则表达式。要了解更多关于正则表达式的信息,请在谷歌上搜索或尝试Zed Shaw 的关于正则表达式的好书

于 2012-10-16T15:51:55.037 回答
4

请注意,从 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'),
]
于 2017-12-08T12:52:53.710 回答
0

关于url方法:

url(r'^$', 'pages.views.root')

url在 Django 3.1 中已弃用,最好re_path改用它。

https://docs.djangoproject.com/en/3.1/ref/urls/#s-url

https://docs.djangoproject.com/en/3.1/ref/urls/#re-path

注意:该r'^$'模式不适用于path函数,并且会给您一个误导性错误,即找不到路由。

re_path(r'^$', [etc])每次使用正则表达式而不是模式中的简单字符串时,都必须使用。

于 2021-03-17T23:15:39.687 回答