首页 > 解决方案 > 如果我在导航栏上单击两次相同的按钮,如何创建不会引发 404 错误的动态 url?

问题描述

我目前正在做我的第一个网页设计,我的网址遇到了一些问题。我想要做的是一个导航栏,当你点击按钮时,它会将你重定向到一个页面。但是,如果我在导航栏按钮上单击两次,则会引发问题,因为程序仍在读取另一个 url。这里有一些照片,你可以理解。[当我点击翻译器按钮时,网址会添加翻译器。

在此处输入图像描述 现在,如果我再次单击翻译器按钮,则会引发 404 错误。

在此处输入图像描述 现在如果我点击主页按钮,我仍然在 url 中有翻译器/,所以它会引发另一个 404 错误。

我的问题是,我怎样才能做一个动态网址,以便当我点击另一个按钮时,它不会出现 404 错误并将我重定向到该页面。

这是导航栏的代码

<nav class="navbar fixed-top navbar-expand-lg navbar-light" style='background-color: snow;'>
    <div class = 'container'>
      <a class="navbar-brand" href="#">
        <img src="{% static ''%}" width="70" height="30" class="d-inline-block align-top" alt="">

      </a>
      <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarTogglerDemo01" aria-controls="navbarTogglerDemo01" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>
      <div class="collapse navbar-collapse" id="navbarTogglerDemo01">
        <ul class="navbar-nav mx-auto">
          <li class="nav-item active">
            <a class="nav-link" href='home'>Home <span class="sr-only">(current)</span></a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="translator">Translator</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#" >Process</a>
          </li>
        </ul>

通用 urls.py 导航栏

from django.contrib import admin
from django.urls import path, include
from translator.views import home_view

urlpatterns = [
    path('translator/', include('translator.urls')),
    path('', home_view, name='home'),
    path('admin/', admin.site.urls),
]

和翻译器 urls.py

from django.urls import path
from .views import translator_view 


app_name = 'translator'
urlpatterns = [
    path('', translator_view, name='translator'),
    
]

标签: pythonhtmlcssdjango

解决方案


有一个内置的模板标签:url

返回与给定视图和可选参数匹配的绝对路径引用(没有域名的 URL)。

因此,对于位于主项目中的任何模式urls.py,您可以使用它们的模式名称来反转它们,例如:

urls.py

urlpatterns = [
    path('', views.home, name='home')
]

.html

<a href="{% url 'home' %}">Home</a> {# outputs <a href="/">Home</a> #}

笔记

如果您有每个应用程序的 url,例如您的translate.urls,则需要在包含它的 url 时为应用程序提供一个命名空间,例如:

urls.py

urlpatterns = [
    path('translator/', include(('translator.urls', 'translator'), namespace='translator'))
]

翻译器.urls.py

urlpatterns = [
    path('', translator_view, name='index'),
]

.html

<a href="{% url 'translator:index' %}">Translator</a> {# outputs <a href="/translator/">Translator</a> #}

推荐阅读