我正在尝试解决 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(#, #)
中代码的不同变体来获取条目的内容。感谢您的帮助!
发生这种情况是因为您没有用“/”关闭 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"),
]