全路径法

2024-05-16 09:34:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是从django开始(说实话,python也是)

我正在尝试一种模型方法,它可以减少自身.鼻涕虫从当前URL返回到模板。在

这是我尝试过的方法:

class Category(models.Model):
    ...
    def remove_filter(self):
        url = HttpRequest.get_full_path()
        slug = '/' + self.slug
        return url.replace(slug, '')

但正如你所能想象的,这是行不通的。在

模板的代码段:

^{pr2}$

我的核心目标是有一个前端图标,通过删除当前对象的slug更改url。在

我不知道如何通过观点来做,但我愿意接受任何建议。在

def category_page(request, url):
    slugs = url.split('/')
    active = Category.objects.filter(slug__in=slugs)
    sorted_slugs = []
    for i in active:
        sorted_slugs.append(i.slug)
    if slugs != sorted_slugs:
        url = '/'.join(sorted_slugs)
        return redirect('http://127.0.0.1:8000/catalog/' + url)
    inactive = Category.objects.exclude(slug__in=slugs)
    return render(request, 'category.html', {'active_filters': active,
                                              'inactive_filters': inactive})

谢谢。在


Tags: 方法inself模板urlreturndeffilter
2条回答

您可以将所有活动段塞的列表发送到模板,然后构建自定义模板过滤器来构造修改后的url。在

在视图.py

# Send your list of active slugs to the template

return render(request, 'category.html', {
    'active_filters': active,
    'inactive_filters': inactive,
    'slugs': slugs,
})

标签_过滤器.py

^{pr2}$

你的模板

{% for object in active_filters %}
<li>
  <a href="{{ object|remove_filter:slugs }}"><i class="icon-remove"></i></a>{{ object }}
</li>
{% endfor %}

您的remove_filter方法无法访问当前请求。HttpRequest是类,而不是当前的请求实例。在

我建议您将remove_filter重写为custom tag or filter。这样,您的函数就可以访问类别和请求实例。您还必须在设置中激活request template context processor。在

相关问题 更多 >