我有2个URL,URL中有一个slug字段.
url(r'^genres/(?P<slug>.+)/$', views.genre_view, name='genre_view'),
url(r'^genres/(?P<slug>.+)/monthly/$', views.genre_month, name='genre_month'),
Run Code Online (Sandbox Code Playgroud)
第一个打开正常,但第二个给出了一个DoesNotExist
错误的说法Genres matching query does not exist
.
以下是我在HTML中访问第二个URL的方法
<li><a href="{% url 'genre_month' slug=genre.slug %}">Monthly Top Songs</a></li>
Run Code Online (Sandbox Code Playgroud)
我试图在视图中打印slug.genre_name/monthly
相反,而不是传递它genre_name
.
我认为问题在于URL中的正则表达式.知道这里有什么问题吗?
Lud*_*mer 21
Django总是使用匹配的第一个模式.对于类似于genres/genre_name/monthly
您的第一个模式匹配的URL ,所以从不使用第二个.事实是正则表达式不够具体,允许所有字符 - 这似乎没有意义.
您可以颠倒这些模式的顺序,但您应该做的是使它们更具体(比较:基于通用类的视图文档中的urls.py示例):
url(r'^genres/(?P<slug>[-\w]+)/$', views.genre_view, name='genre_view'),
url(r'^genres/(?P<slug>[-\w]+)/monthly/$', views.genre_month, name='genre_month'),
Run Code Online (Sandbox Code Playgroud)
Bab*_*k K 10
我相信你也可以放弃@Ludwik建议_
的模式并修改到这个版本(这是一个更简单的一个字符:)):
url(r'^genres/(?P<slug>[-\w]+)/$', views.genre_view, name='genre_view'),
url(r'^genres/(?P<slug>[-\w]+)/monthly/$', views.genre_month, name='genre_month'),
Run Code Online (Sandbox Code Playgroud)
注意,\w
代表" 单词字符 ".它始终与ASCII字符匹配[A-Za-z0-9_]
.请注意包含下划线和数字.更多信息
在 Django >= 2.0 中,slug 通过如下方式包含在 URL 中。
from django.urls import path
urlpatterns = [
...
path('articles/<slug:some_title>/', myapp.views.blog_detail, name='blog_detail'),
...
]
Run Code Online (Sandbox Code Playgroud)
来源:https : //docs.djangoproject.com/en/2.0/ref/urls/#django.urls.path
归档时间: |
|
查看次数: |
12477 次 |
最近记录: |