Django:使用变量作为 URL 命名空间?

Posted

技术标签:

【中文标题】Django:使用变量作为 URL 命名空间?【英文标题】:Django: Using a variable as the URL namespace? 【发布时间】:2018-05-25 03:01:09 【问题描述】:

我正在尝试为体育网站创建子菜单。每项运动都需要自己的子菜单。我遇到的问题是我需要命名空间本身在某种程度上是动态的。

SportListView 返回运动,然后我可以按运动过滤新闻文章。

观看次数:

class SportListView(ListView):
    template_name="sports/sport-home.html"
    context_object_name='sport_list'

def get_context_data(self, **kwargs):
    context = super(SportListView, self).get_context_data(**kwargs)
    context['sport_menu'] = get_object_or_404(Sport, 
sport_slug=self.kwargs['sport_slug'])
    return context

模板:

<nav class="navbar navbar-expand-lg main-nav">
    <a href="% url 'sports:sport-home' sport_menu.sport_slug %">
    sport_menu.name</a>
    <a href="% url sport_menu.sport_slug 'monthly' %">Monthly View</a>
</nav>

子菜单中的第一个链接可以正常工作。如您所见,它有效地充当了每项运动的主页按钮。

另一方面,第二个链接没有。在错误消息中,它返回了这项运动的 slug,但我无法让它充当命名空间。

顺便说一句,我确实有一个应用程序及其 URLs.py 文件为当前运动正确配置。所以我知道这不是问题所在。

编辑:

我在此配置中收到的当前错误消息是:

未找到“板球”的反向。 “板球”不是有效视图 函数或模式名称。

【问题讨论】:

【参考方案1】:

您可以使用add 模板过滤器:

<a href="% url sport_menu.sport_slug|add:':monthly' %">Monthly View</a>

【讨论】:

以上是关于Django:使用变量作为 URL 命名空间?的主要内容,如果未能解决你的问题,请参考以下文章

你如何使用 Django URL 命名空间?

django-URL实例命名空间

django url中的实例命名空间和应用程序命名空间有啥区别?

Django中url使用命名空间的错误

django:url的命名空间

如何在可重用的应用程序中将命名空间 url 与 django 一起使用