Django在多个视图/模板中使用变量

时间:2016-06-02 19:12:21

标签: python django

我有一张包含搜索结果的表格。这意味着这里没有模型。问题是我想转到点击项目的详细信息页面,但我不确定如果不将其放入URL中,我是否可以这样做。

现在就这样做了:

在表格中的每个项目的.html中:

<a href="{% url 'detail' title=item.name %}">view more</a></td>

在我的urls.py中

url(r'^track/(?P<title>.+?)/$', detail,
            name='detail'),

在我的详细视图中,它使用变量:

def detail(request, title):
    if request.method == 'GET':
        ...

现在这可能会奏效,但对我来说并不理想。 url包含空格并且不是urlencoded,因为我需要像它一样的变量。我想知道是否有更简单或更好的方法将此变量传递给不同的视图或模板

1 个答案:

答案 0 :(得分:0)

执行此操作的正确方法是在item模型的模型类上定义get_absolute_url方法。这通常使用reverse完成,因此它看起来像这样:

def get_absolute_url(self):
    from django.core.urlresolvers import reverse
    return reverse('detail', kwargs={'title': self.title})

然后在您的模板中,您只需:

<a href="{{ item.get_absolute_url }}">view more</a>

标题将被正确转义。

也就是说,您可能需要考虑使用slug代替标题来生成您的网址。