首页 > 解决方案 > django中的url路由?

问题描述

我在 django 中从 2 到 3 页创建网站,所以问题出在 html 部分,当在 html 中链接页面时,现在有两个页面(索引“站点的主主页 - 关于)所以当我运行服务器时打开索引页面,当我点击关于链接时,网址将是(www.xxxx.com/about/about),当我点击索引链接时,网址将是(www.xxxx.com/about)而不是索引page . 所以这两个链接将我引导到 about 页面,但 url 不同

这是主项目中的网址:

urlpatterns = [
    path('',include('pages.urls')),
    path('about/',include('pages.urls')),
    path('admin/', admin.site.urls),
] 

和页面应用程序中的 urls.py:

urlpatterns = [
    path('',views.index , name='index'),
    path('about/',views.about , name='about'),
]

和 pages 应用程序中的 views.py :

def index(reqouest):
    return render(reqouest,'pages/index.html')

def about(reqouest):
    return render(reqouest ,'pages/about.html')

和关于 html 页面:

<section id="bc" class="mt-3">
    <div class="container">
      <nav aria-label="breadcrumb">
        <ol class="breadcrumb">
          <li class="breadcrumb-item">
            <a href="{% url 'index' %}">
              <i class="fas fa-home"></i> Home</a>
          </li>
          <li class="breadcrumb-item active"> About</li>
        </ol>
      </nav>
    </div>
  </section>

ps 我把html页面放在模板/页面文件夹中

标签: htmldjangorouting

解决方案


path('about/',include('pages.urls'))从您的主要应用网址中删除。

您不应该有 2 个包含相同 url 的 url 前缀。当您按名称反转 url 时,只会使用最后一个包含,因为您基本上定义了两次相同的名称。

当你这样做时path('about/', include('pages.urls')),你是在告诉 django 构建以pages.urls为前缀的所有 url about/,因此/about/变成“index”url 模式和/about/about/“about”url 模式。

第一个include( path('', include('pages.urls'))) 表示您正在创建 url//about/,这将起作用,但它们将不再被命名为 url,因为您用第二个 覆盖名​​称include

因此,如果您删除includepages.urls 的第二个,您将得到您想要的。


推荐阅读