django 模板 url 问题
django template url issue
我已经从 ListView 设置了动态 linking,效果很好,但现在我正在过滤 ListView,模板中的任何 links 都附加了当前 url .这是我的 urls.py:
urlpatterns = [
path('list/<area>/', ProjectListView.as_view(), name='project-list'),
path('project-create/',
ProjectCreateView.as_view(), name='project-create'),
path('<slug:slug>/update/', project_update_view, name='project-update'),
path('search/', search, name='search'),
]
在模板中我的 link 看起来像这样:
<h3><a href="{{ project.slug }}/update">{{ project.title }}</a></h3>
我希望它会出现在这里:
http://127.0.0.1:8000/si/
但它正在寻找这里:
http://127.0.0.1:8000/si/list/All/
其中添加了 "list" 以防止其他 url 错误匹配,如果需要我可以添加,"All" 来自过滤器的动态变量和将是 8 个不同字符串之一。
如何让这个 url 查看我在 urls.py 中指定的位置,而不只是附加当前的 url?
更新:添加视图:
def project_update_view(request, slug):
"""
project_update_view combines an update form with the update
history.
"""
obj = Project.objects.get(slug=slug)
if request.method == 'POST':
form = ProjectUpdateForm(request.POST)
form.instance.project = obj
if form.is_valid():
completed = form.cleaned_data['completed']
category = form.cleaned_data['category']
if completed is True:
CategorySatisfied.objects.create(
project=obj, update_category=category)
form.save()
return redirect('project-list')
else:
form = ProjectUpdateForm()
context = {
"form": form,
"object": obj
}
return render(request, 'project_portal/project_update.html', context)
您需要在 URL 前加一个斜杠,这样它就是绝对的 URL,否则它会被视为相对的 URL。
<h3><a href="/{{ project.slug }}/update">{{ project.title }}</a></h3>
如果您使用 {% url %}
标签而不是对 URL.
进行硬编码,就可以避免此类错误
<h3><a href="{% 'project-update' project.slug %}">{{ project.title }}</a></h3>
如果您在应用程序的 urls.py
中有 app_name = 'yourapp'
,请将上面的 'project-update'
更改为 'yourapp:project-update'
。
我已经从 ListView 设置了动态 linking,效果很好,但现在我正在过滤 ListView,模板中的任何 links 都附加了当前 url .这是我的 urls.py:
urlpatterns = [
path('list/<area>/', ProjectListView.as_view(), name='project-list'),
path('project-create/',
ProjectCreateView.as_view(), name='project-create'),
path('<slug:slug>/update/', project_update_view, name='project-update'),
path('search/', search, name='search'),
]
在模板中我的 link 看起来像这样:
<h3><a href="{{ project.slug }}/update">{{ project.title }}</a></h3>
我希望它会出现在这里:
http://127.0.0.1:8000/si/
但它正在寻找这里:
http://127.0.0.1:8000/si/list/All/
其中添加了 "list" 以防止其他 url 错误匹配,如果需要我可以添加,"All" 来自过滤器的动态变量和将是 8 个不同字符串之一。
如何让这个 url 查看我在 urls.py 中指定的位置,而不只是附加当前的 url?
更新:添加视图:
def project_update_view(request, slug):
"""
project_update_view combines an update form with the update
history.
"""
obj = Project.objects.get(slug=slug)
if request.method == 'POST':
form = ProjectUpdateForm(request.POST)
form.instance.project = obj
if form.is_valid():
completed = form.cleaned_data['completed']
category = form.cleaned_data['category']
if completed is True:
CategorySatisfied.objects.create(
project=obj, update_category=category)
form.save()
return redirect('project-list')
else:
form = ProjectUpdateForm()
context = {
"form": form,
"object": obj
}
return render(request, 'project_portal/project_update.html', context)
您需要在 URL 前加一个斜杠,这样它就是绝对的 URL,否则它会被视为相对的 URL。
<h3><a href="/{{ project.slug }}/update">{{ project.title }}</a></h3>
如果您使用 {% url %}
标签而不是对 URL.
<h3><a href="{% 'project-update' project.slug %}">{{ project.title }}</a></h3>
如果您在应用程序的 urls.py
中有 app_name = 'yourapp'
,请将上面的 'project-update'
更改为 'yourapp:project-update'
。