用django和python生成路径,请求对象是什么



这是我第一次使用Django,所以可能有一个我不知道的明显解决方案。

我的任务是创建一个类似百科全书的网站,目标之一是为我的每一篇文章创建页面。我在我的";视图";文件:

def title_page(request, title):
if title not in util.list_entries():
return render(request, "encyclopedia/error.html")
return render(request, f"encyclopedia/title.html", {
"page_name": title,
"content": util.get_entry(title)
})

其中CCD_ 1是提供物品名称列表的函数,而CCD_。

在我的";url";文件我有一个url模式列表,其中包含我的所有路径:

urlpatterns = [
path("", views.index, name="index")
]

我试图创建一个循环,为我拥有的每一篇文章添加一个路径:

for entry in util.list_entries():
urlpatterns.append(path(f"<str:{entry}>", views.title_page(entry), name=entry))

然而,我得到了一个类型错误:

TypeError: title_page() missing 1 required positional argument: 'title'

我假设title_page函数需要请求对象,但我不确定如何访问它以及如何通过path函数传递它,此外,在像index函数这样不需要其他位置参数的函数中:

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

url路径

path("", views.index, name="index")

似乎在没有请求对象作为参数的情况下工作,所以我不明白为什么在第一种情况下它不工作。

任何想法都会有很大帮助,提前谢谢。

此时不要太担心请求对象。你是对的,视图需要它,但只要你把它包含在函数定义中,django就会处理它。

您的错误是因为您的视图希望收到标题,但您的URL没有通过。

以djangoURL文档为例;

# URLconf
from django.urls import path
from . import views
urlpatterns = [
path('blog/', views.page),
path('blog/page<int:num>/', views.page),
]
# View (in blog/views.py)
def page(request, num=1):
# Output the appropriate page of blog entries, according to num.
...

正如您在这里看到的,num在视图中是预期的,并且给定了一个默认值,它也在上面的URL中定义,对/blog//blog/3的请求都会碰到相同的视图。

当请求到达/blog/时,1的默认值用于util.list_entries()0变量。

所以你的视图title_page可能有一个类似的URL;

urlpatterns = [
path('page/<str:title>/', views.title_page, name='page'),
]

然后标题将可用于您的视图,而此时此刻并没有。

然后,您可以使用django中的以下HTML标记链接到您的视图;

<a href="{% url 'page' 'News' %}">News</a>

相关内容

  • 没有找到相关文章

最新更新