通过Django url路径获取入口页面出错

问题描述 投票:0回答:1

我正在尝试解决 CS50W 项目 1“wiki”中的问题。 我正在制定规范 - “入口页面”,如果我将

/wiki/title
添加到 url,它应该获取入口页面。 这些是我的文件:

wiki/urls.py

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include("encyclopedia.urls"))
]

百科全书/urls.py

from django.urls import path

from . import views

# List of urls
urlpatterns = [
    path("", views.index, name="index"),
    path("<str:title>", views.entry, name="page"),
]

百科全书/views.py

def entry(request, title):
    """
    A function that retrieves the content of an entry based on the title provided.
    If the entry is not found, it renders a 404 error page.
    """
    content = util.get_entry(title)

    if content == None:
        return render(request, "encyclopedia/404.html")
    else:
        html_content = markdown2.markdown(content)
        return render(request, "encyclopedia/entry.html", {
            "title": title, "content": html_content
        })

entry.html 文件:

{% extends "encyclopedia/layout.html" %}

{% block title %}
    {{ title | safe }}
{% endblock %}

{% block body %}    
    {{ content | safe }}
    <!--Link to edit page-->
    <div>
        <a href="{% url 'edit' title %}" class="btn btn-primary mt-5">
        Edit Page
        </a>
    </div>    
{% endblock %}

这是我在 url 添加“css”时遇到的错误:

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

admin/
[name='index']
<str:title> [name='page']
search/ [name='search']
newpage/ [name='newpage']
edit/<str:title> [name='edit']
random/ [name='random']
The current path, css/, didn’t match any of these.

添加任何其他条目(例如 - django/html 等)后,我只会得到“encyclopedia/404.html”。

但是,当 url 输入与条目文件的名称完全匹配时(例如“CSS - CSS”、“Git - Git”),它会为我提供正确的条目页面以及任何其他大小写字母的组合,从而引发上述错误。

我在 urls.py 中尝试了不同的路径。还尝试了

def entry(#, #)
中代码的不同变体来获取条目的内容。感谢您的帮助!

html django-views web-applications django-urls
1个回答
0
投票

发生这种情况是因为您没有用“/”关闭 url 路径,并且默认情况下,

django.middleware.common.CommonMiddleware
已打开。

您的情况:

#encyclopedia/urls.py    
from django.urls import path    
from . import views

# List of urls
urlpatterns = [
    path("", views.index, name="index"),
    path("<str:title>/", views.entry, name="page"),
]
© www.soinside.com 2019 - 2024. All rights reserved.