在 Django 中,如何为“/”和其他基于根的 url 编写 url 模式
Posted
技术标签:
【中文标题】在 Django 中,如何为“/”和其他基于根的 url 编写 url 模式【英文标题】:In Django, How do you write the url pattern for '/' and other root-based urls 【发布时间】:2012-10-06 18:36:14 【问题描述】:我是 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' 和其他简单路径会正确定向。
谢谢大家!
【讨论】:
我想为其他错过它的人添加:pages
是 OP 项目中的一个应用程序,而不是特定于 Django 的语法。可能是other_pages
或类似的东西。
这个!当我第一次创建我的项目时,我错误地将项目级别的 url_pattern 解释为本身就是一个应用程序。似乎正确的设计是为所有网页内容以及任何其他特定应用程序提供专用应用程序。这是正确的吗?【参考方案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()
在此处查看示例: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'),
]
【讨论】:
【参考方案4】:关于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'^$'
pattern 不能与 path
函数一起使用,并且会给您一个误导性错误,即找不到路由。
每次使用正则表达式而不是模式中的简单字符串时,都必须使用re_path(r'^$', [etc])
。
【讨论】:
以上是关于在 Django 中,如何为“/”和其他基于根的 url 编写 url 模式的主要内容,如果未能解决你的问题,请参考以下文章
django:DetailView 如何为两个模型工作或基于类的视图如何为两个模型工作?
在 Django 中,如何为 IntegerChoices 枚举定义字符串值?