在 django 中通过 <a href = "{% url 'list_item' %}" >传递列表



我必须添加到页面主体中列出的列表项的链接,将用户重定向到列表项所代表的页面。列表项是从views.py中的一个函数中提取的,该函数从另一个名为util.py的文件中提取列表项。然而,我不知道如何在遍历列表项(即我写为<a href = "{% url '....' %}">的部分(时添加这些超链接。这是index.html的代码,该页面将显示列表项和超链接:

{% extends "encyclopedia/layout.html" %}
{% block title %}
Encyclopedia
{% endblock %}
{% block body %}
<h1>All Pages</h1>
<ul>
{% for entry in entries %}
<li><a href = "{% url '....' %}">{{ entry }}</a></li>
{% endfor %}
</ul>
{% endblock %}

这是从util.py获取列表并将其存储在名为entries:的列表中的函数

from django.shortcuts import render
from . import util

def index(request):
return render(request, "encyclopedia/index.html", {
"entries": util.list_entries()
})

这是util.py的原始函数,它将列表返回到views.py中的index函数。

def list_entries():
"""
Returns a list of all names of encyclopedia entries.
"""
_, filenames = default_storage.listdir("entries")
return list(sorted(re.sub(r".md$", "", filename)
for filename in filenames if filename.endswith(".md")))

这是urls.py文件:

from django.urls import path
from . import views
app_name = "wiki"
urlpatterns = [
path("", views.index, name="index"),
path("<str:TITLE>", views.entry_page, name="entry_page")
]

这应该可以工作。不

<li><a href ="/{{entry}}/">{{ entry }}</a></li>

我几乎放弃了这个项目,因为这个错误不允许我继续这个项目,我不想花更多的时间寻找这个问题的解决方案。然而,今天我决定做最后一次尝试,并找到了解决方案!因此,主要错误出现在urls.py中。由于列表中的项目不断变化,路径应该是动态的,因此其名称字段也应该是一个变量。然而,我给它起了一个静态的名字。这就是我所说的线路:path("<str:TITLE>", views.entry_page, name="entry_page")名称被设置为entry_page,它只是一个字符串。它应该被命名为TITLE,这是我在整个条目代码中使用的一个变量。因此,修改将是urls.py中的path("<str:TITLE>", views.entry_page, name="TITLE")和index.html中的<li><a href = "{% url 'wiki:TITLE' TITLE=entry %}">{{ entry }}</a></li>

<a href= "wiki/{{ entry }}"><li>{{ entry }}</li></a>

在尝试和错误之后,这才是有效的。这是通过检查默认添加到CSS页面中的HTML得到的。

最新更新