Python django URL将我重定向到其他视图
我不明白我的问题这是我的代码: url.pyPython django URL将我重定向到其他视图,python,django,url,routes,views,Python,Django,Url,Routes,Views,我不明白我的问题这是我的代码: url.py urlpatterns = patterns('blog.views', ... url(r'^(?P<slug>.+)$', 'blog', name='blog'), url(r'^membres$', 'membres', name='membres'), ) 这是我的base.html模板中的链接 <li><a href="{% url "membres" %}">List<
urlpatterns = patterns('blog.views',
...
url(r'^(?P<slug>.+)$', 'blog', name='blog'),
url(r'^membres$', 'membres', name='membres'),
)
这是我的base.html模板中的链接
<li><a href="{% url "membres" %}">List</a></li>
当我单击链接时,它会将我重定向到blog视图,然后呈现blog.html而不是使用membres视图
控制台或模板中没有错误。我所有的代码都在我名为“blog”的应用程序中,这是因为urlresolver从上到下采用模式,“membres”匹配
(?p.+)
,所以urlresolver返回blog
视图。把更多的混凝土放高。我还建议在slug regexp中使用更具体的字符,即(?P[A-Za-z0-9_ \-]+)
这是因为urlresolver从上到下采用模式,“membres”匹配
(?P+)
,所以urlresolver返回blog
视图。把更多的混凝土放高。我还建议在slug regexp中使用更具体的字符,即(?P[A-Za-z0-9_ \-]+)
Django在匹配的第一个URL模式处停止。这意味着你的
blog
视图——它只是查找一个或多个字符——将把你的mysite.com/membres
URL解释为带有slugmembres
的博客文章
要修复此问题,请尝试交换URL模式的顺序:
urlpatterns = patterns('blog.views',
...
url(r'^membres$', 'membres', name='membres'),
url(r'^(?P<slug>.+)$', 'blog', name='blog'),
)
urlpatterns=patterns('blog.views',
...
url(r“^membres$”,“membres”,name='membres'),
url(r'^(?P.+)$,'blog',name='blog'),
)
通常,正是出于这个原因,您希望最通用的模式位于底部。Django在匹配的第一个URL模式处停止。这意味着你的
blog
视图——它只是查找一个或多个字符——将把你的mysite.com/membres
URL解释为带有slugmembres
的博客文章
要修复此问题,请尝试交换URL模式的顺序:
urlpatterns = patterns('blog.views',
...
url(r'^membres$', 'membres', name='membres'),
url(r'^(?P<slug>.+)$', 'blog', name='blog'),
)
urlpatterns=patterns('blog.views',
...
url(r“^membres$”,“membres”,name='membres'),
url(r'^(?P.+)$,'blog',name='blog'),
)
通常,正是出于这个原因,您希望最通用的模式位于底部。Django使用第一个匹配的模式。第一个URL正则表达式匹配任何字符串,包括
/membres
,因此Django从不尝试第二个。我建议这样做:
urlpatterns = patterns('blog.views',
url(r'^/blog/(?P<slug>[-\w]+)/$', 'blog', name='blog'),
url(r'^membres/$', 'membres', name='membres'),
)
urlpatterns=patterns('blog.views',
url(r'^/blog/(?P[-\w]+)/$,'blog',name='blog'),
url(r'^membres/$,'membres',name='membres'),
)
如果您必须有一个全面模式,那么它应该是列表中的最后一个模式,以便其他模式有机会在之前匹配:
urlpatterns = patterns('blog.views',
url(r'^membres/$', 'membres', name='membres'),
# other patterns...
url(r'^(?P<slug>[-\w]+)/$', 'blog', name='blog'),
)
urlpatterns=patterns('blog.views',
url(r'^membres/$,'membres',name='membres'),
#其他模式。。。
url(r'^(?P[-\w]+)/$,'blog',name='blog'),
)
始终包含尾部斜杠也是一个好习惯(默认情况下,Django会将其附加到请求中)。为了匹配slug,我建议
[-\w]+
,它将匹配任何字母数字字符序列,\uu
和-
Django使用匹配的第一个模式。第一个URL正则表达式匹配任何字符串,包括/membres
,因此Django从不尝试第二个。我建议这样做:
urlpatterns = patterns('blog.views',
url(r'^/blog/(?P<slug>[-\w]+)/$', 'blog', name='blog'),
url(r'^membres/$', 'membres', name='membres'),
)
urlpatterns=patterns('blog.views',
url(r'^/blog/(?P[-\w]+)/$,'blog',name='blog'),
url(r'^membres/$,'membres',name='membres'),
)
如果您必须有一个全面模式,那么它应该是列表中的最后一个模式,以便其他模式有机会在之前匹配:
urlpatterns = patterns('blog.views',
url(r'^membres/$', 'membres', name='membres'),
# other patterns...
url(r'^(?P<slug>[-\w]+)/$', 'blog', name='blog'),
)
urlpatterns=patterns('blog.views',
url(r'^membres/$,'membres',name='membres'),
#其他模式。。。
url(r'^(?P[-\w]+)/$,'blog',name='blog'),
)
始终包含尾部斜杠也是一个好习惯(默认情况下,Django会将其附加到请求中)。为了匹配一个slug,我建议使用[-\w]+
,它将匹配任何字母数字字符序列、\u
和-