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

Django - Python - URL didn't match any of these

当我在 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')
]

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

" The current path, about.html, didn't match any of these." But when I change about/ to about.html/ then I can click on about in navbar and page opens, but when I switch from about to contact in navbar I get error like: "The current path, about.html/contact.html, didn't match any of these."

这是带有.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:

中有 .html 带有 about/ 的后缀时,这是我在导航栏中点击 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.

这是我在导航栏中点击 about 时出现的错误,当时我在 urls.py:

中没有带有 about/ 的 .html 后缀
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 -->

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

原因是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')
]

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

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

当你把你的 link 放在 <a> 标签中时,你应该使用 django url-reversion template tag 像这样:

{% url 'about' %}

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

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