Django:如何在urls.py中提供运行时更改的类别?

时间:2013-04-02 17:05:36

标签: django url django-views

我正在尝试在我的django支持的电子商务网站中创建一个新的网址级别,这意味着如果用户在domain.com/category/foo/我正在尝试添加下一级别,他们会点击foo中的某个元素并在domain.com/category/foo/tag/bar/结束。为此,我创建了我的urls.py行来检测这个,我相信这里没有问题:

(r'^category/(?P<category_slug>[-\w]+)/tag/(?P<tag_slug>[-\w]+)/$', 'show_tag', {
'template_name':'catalog/product_list.html'},'catalog_tag'),

一旦通过urls.py映射了请求,我知道它需要来自views.py的一些变量才能让get_adsolute_url做它的事情,所以我创建了视图:

def show_tag(request, 
                  tag_slug, 
                  template_name="catalog/product_list.html"):
    t = get_object_or_404(Tag, 
                          slug=tag_slug)
    products = t.product_set.all()
    page_title = t.name
    meta_keywords = t.meta_keywords
    meta_description = t.meta_description
    return render_to_response(template_name, 
                              locals(), 
                              context_instance=RequestContext(request))

最后,在我的Tag模型中,我设置了get_absolute_url来填充关键字参数:

@models.permalink
    def get_absolute_url(self):
        return ('catalog_tag', (), { 'category_slug': self.slug, 'tag_slug': self.slug })

我确定我要求的类别和标签存在,然后输入domain.com/category/foo/tag/bar并收到

TypeError at /category/foo/tag/bar/
show_tag() got an unexpected keyword argument 'category_slug'

我相信我知道错误在哪里,但我不知道如何解决它。我的get_abolute_url设置'category_slug': self.slug,但正如我所说,该定义存在于我的Tag模型中。我的类别模型存在于相同的models.py中,但如何告诉我get_absolute_url找到它?

1 个答案:

答案 0 :(得分:1)

您的观点show_tag必须有一个参数才能接受现在不存在的category_slug

def show_tag(request, 
    category_slug, tag_slug, 
    template_name="catalog/product_list.html")