You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django项目中HTML导航链接重定向异常问题的解决方法

修复导航重定向错误的解决方案

我来帮你一步步排查和修复这个问题:

1. 修复视图中的查询集调用错误

首先看views.py里的代码,你写的ItemCategory.objects.all少了括号——all是一个方法,必须调用它才能返回查询集,否则传递给模板的只是方法对象,会导致模板渲染失败或数据无法正常显示:

修改views.py中的所有视图:

def product(request):
    return render(request = request, template_name = "main/categories.html", context ={"categories": ItemCategory.objects.all()})  # 补充括号
def homepage(request):
    return render(request = request, template_name = "main/categories.html", context ={"categories": ItemCategory.objects.all()})  # 补充括号
def about(request):
    return render(request = request, template_name = "main/about.html", context ={"categories": ItemCategory.objects.all()})  # 补充括号
def contact(request):
    return render(request = request, template_name = "main/contact.html", context ={"categories": ItemCategory.objects.all()})  # 补充括号

2. 修复导航栏的URL引用问题

你的urls.py里设置了app_name = "main",所以在模板中使用{% url %}标签时必须加上命名空间;同时,*硬编码的相对路径(比如about/)*会导致在子页面点击时出现错误跳转(比如在product/页面点击会跳到product/about/,而不是根目录的/about/)。

修改navbar.html的链接,统一使用带命名空间的{% url %}标签:

<nav>
    <div id="nav-wrapper">
        <div>
            <ul class="center hide-on-med-and-down">
                <li>
                    <a href="{% url 'main:homepage' %}">Home</a>
                </li>
                <li>
                    <a href="{% url 'main:about' %}">About Us</a>
                </li>
                <li>
                    <a href="{% url 'main:product' %}">Products</a>
                </li>
                <!-- 注意:Services链接目前在urls.py中没有对应的路由,要么添加视图和路由,要么暂时注释/移除 -->
                <!-- <li>
                    <a href="services/">Services</a>
                </li> -->
                <li>
                    <a href="{% url 'main:contact' %}">Contact</a>
                </li>
                <li>
                    <a class='dropdown-trigger btn' href='#' data-target='dropdown1'>Drop Me!</a>
                </li>
            </ul>
        </div>
    </div>
</nav>

如果需要保留Services链接,你需要:

  • 在views.py中添加对应的视图:
def services(request):
    return render(request, "main/services.html", {"categories": ItemCategory.objects.all()})
  • 在urls.py的urlpatterns里添加路由:
path("services/", views.services, name="services"),
  • 最后把导航里的Services链接改成:
<a href="{% url 'main:services' %}">Services</a>

3. 验证路由顺序(可选但推荐)

你的urls.py最后有一个<single_slug>的路由,它会匹配任何未被前面路由匹配的路径。目前它已经放在路由列表的最后,这个顺序是正确的——确保具体路由(比如about/、product/)先被匹配,避免意外的错误匹配。

4. 测试验证

做完以上修改后,重启Django开发服务器,点击导航栏的链接就能正常跳转了。如果还有问题,可以查看浏览器控制台的错误状态码:404代表路由未匹配,500代表视图代码有错误,根据提示进一步排查即可。

内容的提问来源于stack exchange,提问作者Umang Vira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 22:42:50