Django:URL模式包含多个字段的值
我刚开始学习Python,想要建立一个URL模式,这个模式需要两个字段作为参数。这是我模型的一部分:
CATEGORY_CHOICES = (
('M', 'Music'),
('G', 'Games'),
('T', 'TV'),
('F', 'Film'),
('O', 'Misc'),
)
category = models.CharField(max_length = 1, choices = CATEGORY_CHOICES)
slug = models.SlugField(unique=True, max_length=255)
我想要实现的效果是能够像这样调用:thisblog.com/music/this-post,其中/music是分类,/this-post是文章的标识。
我尝试过,但不知道怎么才能正确实现:
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^$', 'blog.views.index'),
url(r'^(?P<category>[\w\-]+)/(?P<slug>[\w\-]+)/$', blog_post, name = 'blog_post'),
)
这样做后我遇到了一个'NoReverseMatch at /'的错误。
任何帮助都非常感谢 :)
更新:
在我的HTML模板中,我有一个链接:
<p><a class="btn btn-default" href="{{post.get_absolute_url}}" role="button">Read more »</a></p>
get_absolute_url的定义是:
def get_absolute_url(self):
return reverse ('blog.views.post', args = [self.slug])
2 个回答
0
如果你在使用基于类的视图,那么像这样的代码就可以用了:
# views.py
class ViewPost(DetailView):
model = Post # change this to the model
def get_queryset(self):
queryset = super(ViewQuizListByCategory, self).get_queryset()
return queryset.filter(category=self.kwargs['category'])
# urls.py
from .views import ViewPost
...
url(r'^(?P<category>[\w\-]+)/(?P<slug>[\w\-]+)/$',
ViewPost.as_view(),
name='blog_post'),
...
这个模板的名字是 post_detail.html
,它应该放在 <项目根目录>/post/templates/post/post_detail.html
这个位置。
2
你的 get_absolute_url
方法里有两个错误。首先,你需要使用你定义的URL名称属性。其次,你需要提供两个参数:类别和slug。
所以应该是:
return reverse('blog_post', args=[self.category, self.slug])