Django URL中的两个变量

时间:2018-03-14 13:13:16

标签: python regex django

我想要一个类似这样的网址:

/(category)/(post-slug)

在链接上,这就是我所拥有的:

{% url blog.category blog.slug %}

和url.py:

url(r'^(I DON"T KNOW WHAT TO PUT ON THIS PART TO GET THE CATEGORY)/(?P<slug>[0-9A-Za-z._%+-]+)', views.post, name='post'),

感谢

编辑: 这就是我现在拥有的: 在/

仍然有NoReverseMatch错误

urls.py

 url(r'^(?P<category>[0-9A-Za-z._%+-]+)/(?P<slug>[0-9A-Za-z._%+-]+)$', views.post, name='post'),

的index.html

<a href="{% url blog.category blog.slug %}">

views.py

def post(request, slug, category):
    try:
        blog = Blog.objects.get(slug=slug)
    except Blog.DoesNotExist:
        raise Http404('This post does not exist')
    return render(request, 'parts/post.html', {
        'blog': blog,
    })

1 个答案:

答案 0 :(得分:2)

首先,您的URL标记需要您正在反转的模式的名称作为第一个参数:

{% url 'post' blog.category blog.slug %}

或者如果您使用的是名称空间,请执行以下操作:

{% url 'blog:post' blog.category blog.slug %}

您还没有显示您的观点或模型,因此我们只能猜测您的网址格式应该是什么。我不确定为什么你觉得这个类别让人感到困惑 - 你只需要选择一个组的名称(例如category_slug),以及该组的正则表达式(你可以使用相同的名称)你用于slug)。那会给你:

url(r'^(?P<category_slug>[0-9A-Za-z._%+-]+)/(?P<slug>[0-9A-Za-z._%+-]+)$'

请注意,正则表达式的结尾应该有一美元。