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'