【问题标题】:Can't give href to a link, error: "Reverse for 'foo' not found"无法为链接提供href,错误:“找不到'foo'的反向”
【发布时间】:2020-04-10 19:30:48
【问题描述】:

我是 django 新手,我得到的错误是:“未找到 'influencers' 的反向。'influencers' 不是有效的视图函数或模式名称”。我想要做的是将两个不同的网址(site.com && site.com/influencers)重定向到同一个视图。这是因为我有一个侧边菜单,其中包含一个名为“影响者”的选项卡,我希望这个链接和“mysite.com”都能正常工作。我什至接受了不使用 mysite.com/influencers 并尝试了类似 href="{% url '' %}" 之类的方法,但也没有用。

这一行在我的 base.html 文件中,导致错误:

<a href="{% url 'app1:influencers' %}" class="side_link">  >&nbsp Influencers</a>

这是我的看法:

class InfluencerList(LoginRequiredMixin, ListView):
    model = Influencer

这是我的 urls.py 文件:

app_name = 'app1'
urlpatterns = [

    path('', InfluencerList.as_view()),
    path('influencers', InfluencerList.as_view()),
]

感谢任何帮助或建议。

【问题讨论】:

  • 需要指定路径名。

标签: python django url redirect url-routing


【解决方案1】:

您需要指定路径的名称

app_name = 'app1'

urlpatterns = [
    path('', InfluencerList.as_view()),
    path('influencers', InfluencerList.as_view(), name='influencers'),
]

我觉得你在两条不同的路径上使用完全相同的视图有点“奇怪”。最好只列出一次相同的视图(具有相同的参数等)。

编辑:您可以使用RedirectView [Django-doc] 让第一个路径重定向到第二个路径:

from django.views.generic.base import RedirectView

app_name = 'app1'

urlpatterns = [
    path('', RedirectView.as_view(pattern_name='app1:influencers')),
    path('influencers', InfluencerList.as_view(), name='influencers'),
]

【讨论】:

  • 谢谢你的帮助,你能澄清一下django如何以及​​在哪里使用name参数吗?我想将用户重定向到相同的视图,或者他使用刚刚的网站 url (mysite.com) 或单击菜单中的“影响者”选项卡。当他输入“mysite.com”时,也许应该有一个命令将用户重定向到“mysite.com/influencers”。我没有得到你的最后一句话,并在谷歌搜索“django 列出相同的视图”,但它也没有帮助我。
  • @İbrahimAkar:您可以使用RedirectView 进行正确的重定向。至于名称,这是引用视图的标识符。所以第一个参数(这里是'''influencers'用于标识视图。因此,如果您想指向某个路径,则需要为其命名。本质上与路径本身不同。
  • 我尝试使用您提到的 RedirectView,但我遇到了与我在第一篇文章中提到的相同的错误。 “mysite.com”不起作用,但“mysite.com/influencers”正在起作用
  • @İbrahimAkar:抱歉,应该是app1:influencers
猜你喜欢
  • 2017-11-10
  • 2021-05-23
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多