用django和python生成路径,请求对象是什么
generating paths with django and python, what is the request object
这是我第一次使用 Django,所以可能有一个我不知道的明显解决方案。
我的任务是创建一个类似百科全书的网站,objective 正在为我拥有的每篇文章创建页面。
我在“视图”文件中创建了一个函数:
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)
})
其中 util.list_entries()
是提供文章名称列表的函数,util.get_entry
是提供所述文章名称的内容的函数。
在我的“urls”文件中,我有一个包含我所有路径的 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:
TypeError: title_page() missing 1 required positional argument: 'title'
我想 title_page
函数需要请求对象,但我不确定如何访问它以及如何通过路径函数传递它,而且在 index
函数之类的函数中不需要其他位置参数:
def index(request):
return render(request, "encyclopedia/index.html", {
"entries": util.list_entries()
})
url路径
path("", views.index, name="index")
似乎在没有请求对象作为参数的情况下也能工作,所以我不明白为什么在第一种情况下它不能。
任何想法都会有很大帮助,在此先感谢您。
此时不要太担心请求 object。你是对的——视图需要它,但只要你将它包含在函数定义中,django 就会处理它。
您的错误是因为您的视图希望收到标题,但您的 URL 没有传递它。
从django中拿这个例子URL docs;
# 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
的默认值用于 num
变量。
所以您的观点 title_page
可能会有 URL 赞;
urlpatterns = [
path('page/<str:title>/', views.title_page, name='page'),
]
然后标题将在您当前不可用的视图中可用。
然后您可以使用以下来自 django 的 HTML 标签 link 到您的视图;
<a href="{% url 'page' 'News' %}">News</a>
这是我第一次使用 Django,所以可能有一个我不知道的明显解决方案。
我的任务是创建一个类似百科全书的网站,objective 正在为我拥有的每篇文章创建页面。 我在“视图”文件中创建了一个函数:
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)
})
其中 util.list_entries()
是提供文章名称列表的函数,util.get_entry
是提供所述文章名称的内容的函数。
在我的“urls”文件中,我有一个包含我所有路径的 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:
TypeError: title_page() missing 1 required positional argument: 'title'
我想 title_page
函数需要请求对象,但我不确定如何访问它以及如何通过路径函数传递它,而且在 index
函数之类的函数中不需要其他位置参数:
def index(request):
return render(request, "encyclopedia/index.html", {
"entries": util.list_entries()
})
url路径
path("", views.index, name="index")
似乎在没有请求对象作为参数的情况下也能工作,所以我不明白为什么在第一种情况下它不能。
任何想法都会有很大帮助,在此先感谢您。
此时不要太担心请求 object。你是对的——视图需要它,但只要你将它包含在函数定义中,django 就会处理它。
您的错误是因为您的视图希望收到标题,但您的 URL 没有传递它。
从django中拿这个例子URL docs;
# 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
的默认值用于 num
变量。
所以您的观点 title_page
可能会有 URL 赞;
urlpatterns = [
path('page/<str:title>/', views.title_page, name='page'),
]
然后标题将在您当前不可用的视图中可用。
然后您可以使用以下来自 django 的 HTML 标签 link 到您的视图;
<a href="{% url 'page' 'News' %}">News</a>