Django - Python - URL 与这些都不匹配

Posted

技术标签:

【中文标题】Django - Python - URL 与这些都不匹配【英文标题】:Django - Python - URL didn't match any of these 【发布时间】:2020-08-02 17:02:18 【问题描述】:

当我写这样的代码时,在about/ 的末尾没有.html

from django.urls import path
from . import views

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

在我的网页导航栏中单击 about 时出现错误,这种情况下的错误是:

" 当前路径 about.html 与其中任何一个都不匹配。"但是,当我将 about/ 更改为 about.html/ 时,我可以在导航栏中单击 about 并打开页面,但是当我在导航栏中从 about 切换到 contact 时,出现如下错误:“当前路径,about.html/contact.html ,与这些都不匹配。”

这是带有.html后缀的代码:

from django.urls import path
    from . import views

    urlpatterns = [
        path('', views.index, name='index'),
        path('about.html/', views.about, name='about'),
        path('contact.html/', views.contact, name='contact'),
        path('categories.html/', views.categories, name='categories'),
        path('docAdd.html/', views.docAdd, name='docAdd')
    ]

views.py 代码:

from django.shortcuts import render
from . models import Document

def index(request):
    return render(request, 'index.html')

def about(request):
    return render(request, 'about.html')

def contact(request):
    return render(request, 'contact.html')

def categories(request):
    return render(request, 'categories.html')

def docAdd(request):
    return render(request, 'docAdd.html')

这是我在导航栏中单击两次时的错误,当我在 urls.py 中有 .htmlsuffix 和 about/ 时:

Page not found (404)
Request Method: GET
Request URL:    http://localhost:8000/about.html/about.html
Using the URLconf defined in thesisProject.urls, Django tried these URL patterns, in this order:

admin/
[name='index']
about.html/ [name='about']
contact.html/ [name='contact']
categories.html/ [name='categories']
docAdd.html/ [name='docAdd']
^media/(?P<path>.*)$
The current path, about.html/about.html, didn't match any of these.

这是我在导航栏中单击一次时的错误,当我在 urls.py 中没有带有 about/ 的 .htmlsuffix 时:

Page not found (404)
Request Method: GET
Request URL:    http://localhost:8000/about.html/about.html
Using the URLconf defined in thesisProject.urls, Django tried these URL patterns, in this order:

admin/
[name='index']
about.html/ [name='about']
contact.html/ [name='contact']
categories.html/ [name='categories']
docAdd.html/ [name='docAdd']
^media/(?P<path>.*)$
The current path, about.html, didn't match any of these.

index.html 中导航栏的代码:

      <div class="collapse navbar-collapse" id="ftco-nav">
        <ul class="navbar-nav ml-auto">
          <li class="nav-item active"><a href="index.html" class="nav-link">Home</a></li>
          <li class="nav-item"><a href="about.html" class="nav-link">About</a></li>
          <li class="nav-item"><a href="categories.html" class="nav-link">Categories</a></li>
          <li class="nav-item"><a href="docAdd.html" class="nav-link">Add New Documents</a></li>
          <li class="nav-item cta"><a href="contact.html" class="nav-link"><span>Get in touch</span></a></li>
        </ul>
      </div>
    </div>
  </nav>
  <!-- END nav -->

我似乎无法解决这个问题,请帮忙。

【问题讨论】:

你能展示用于创建导航栏的模板代码吗? @FiddleStix 我也添加了,请检查 【参考方案1】:

原因是在html中你可能没有在nav前面放斜杠应该是这样的

 <a href=“/about/”>

这将转到 about.html 而不是将 /about.html 添加到 url 的末尾。

所以在导航栏上应该是:

<li class="nav-item"><a href="/about/" class="nav-link">About</a></li>

将您的导航栏更改为:

      <div class="collapse navbar-collapse" id="ftco-nav">
    <ul class="navbar-nav ml-auto">
      <li class="nav-item active"><a href="/index/" class="nav-link">Home</a></li>
      <li class="nav-item"><a href="/about/" class="nav-link">About</a></li>
      <li class="nav-item"><a href="/categories/" class="nav-link">Categories</a></li>
      <li class="nav-item"><a href="/docAdd/" class="nav-link">Add New Documents</a></li>
      <li class="nav-item cta"><a href="/contact/" class="nav-link"><span>Get in touch</span></a></li>
    </ul>
  </div>
</div>

urls.py 应该是这样的:

from django.contrib import admin
from django.urls import path
from main import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index, name='index'),
    path('about/', views.about, name='about'),
    path('contact/', views.contact, name='contact'),
    path('categories/', views.categories, name='categories'),
    path('docAdd/', views.docAdd, name='docAdd')
]

希望对您有所帮助,如果您不明白我所说的内容,请发表评论。

【讨论】:

这没有帮助 问题似乎不在于 django 而在于 html 链接 @Sultan 将 .html 从 URL 中取出,所以应该是 /about.html 而不是 /about.html 请您将您的项目上传到 github 并发送带有链接的回复,以便我可以为您的问题添加修复程序 我没有.htmlsuffix了,问题依然存在【参考方案2】:

首先,您不应该在您的 urls 文件中包含 .html

当你把你的链接放在&lt;a&gt;标签中时,你应该像这样使用django url-reversion template tag:

% url 'about' %

<li class="nav-item"><a href="% url 'about' %">About</a></li>

还要确保您的应用目录中有一个模板文件setup。

【讨论】:

你是不是这个意思:&lt;li class="nav-item"&gt;&lt;a href="% url 'about' %" class="nav-link"&gt;About&lt;/a&gt;&lt;/li&gt; 试过你说的,得到这个错误:Using the URLconf defined in thesisProject.urls, Django tried these URL patterns, in this order: admin/ [name='index'] about/ [name='about'] contact/ [name='contact'] categories/ [name='categories'] docAdd/ [name='docAdd'] ^media/(?P&lt;path&gt;.*)$ The current path, about.html/, didn't match any of these. 好的,在定义应该为该 url 提供的 html 文件的名称时,您可能还没有设置 url 或视图。例如,如果您的代码调用 'about.html/' django 无法在其文件路径中找到它,我看不到您的文件路径,因此无法完全提供帮助,请尝试添加 / 到导航栏的 a 标签中链接的开头(只需关注 zack Tuners 的帖子)。 docs.djangoproject.com/en/3.0/ref/templates/builtinsdocs.djangoproject.com/en/3.0/topics/templates 不知道问题出在哪里 这里是整个项目的链接:github.com/awan58/django/tree/master/thesis 请看看你是否可以帮忙

以上是关于Django - Python - URL 与这些都不匹配的主要内容,如果未能解决你的问题,请参考以下文章

这些花括号在 python Django 中是啥意思? **

谈谈Python之Django搭建企业级官网(第三篇下部)

Django中url与path及re_path区别

python----django

Django运维后台的搭建之三:用url去精细定制与反向解析

Django与Flask的对比:路由映射的区别