在基于函数的视图中动态创建Django URL Slug

时间:2016-03-31 01:22:50

标签: django django-models django-templates django-views

我一直在墙上撞了几个小时,这可能非常简单。

我需要从一个模型中生成两个url slugs。一个实际上叫做slug,是一个SlugField,用于Product标题,另一个是一个ForeignKey类别。

理想情况下我想拥有的是

url(r'^products/(?P<category>[^\.]+)/(?P<slug>[^\.]+)/$', tool_detail, name='tool_detail'),

但是,URL的类别部分一直在为int()生成一个&#34;无效的文字,基数为10:&#39; category&#39; - 好吧,这是错误之一,我尝试了很多不同的组合。

模型

...
slug = models.SlugField()
category = models.ForeignKey(Category)
...

查看

def tool_detail(request, slug):
    tool = get_object_or_404(Tool, slug=slug)
    part = get_object_or_404(Part)
    return render(request, 'tool_detail.html', {'tool': tool, 'part': part})

模板

<a href="{% url 'tool_detail' t.category slug=t.slug %}" ... </a>

网址

url(r'^products/tools/(?P<slug>[^\.]+)/$', tool_detail, name='tool_detail'),

呃......看看/ tools /是如何硬编码的?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

<强>网址

# query by primary key.
url(r'^products/(?P<category>[0-9]+)/(?P<slug>[^\.]+)/$', tool_detail, name='tool_detail'),

# query by the name.
url(r'^products/(?P<category>[\w]+)/(?P<slug>[^\.]+)/$', tool_detail, name='tool_detail'),

查看

def tool_detail(request, **kwargs):
    tool = get_object_or_404(Tool, slug=kwargs.get('slug'))
    part = get_object_or_404(Part)
    return render(request, 'tool_detail.html', {'tool': tool, 'part': part})

应该工作它没有经过测试。

答案 1 :(得分:1)

在url中仅传递参数slug,但在url标记上传递两个参数。只修改如 模板

  <a href="{% url 'tool_detail' t.slug %}" ... </a>

如果slug是int,我们可以更改url

    url(r'^products/tools/(?P<slug>[0-9]+)/$', tool_detail, name='tool_detail'),

关于如何在url标记上传递动态参数的一些示例 https://docs.djangoproject.com/en/1.9/intro/tutorial04/