【问题标题】:django template url issuedjango模板网址问题
【发布时间】:2020-01-09 07:15:50
【问题描述】:

我已经从一个运行良好的 ListView 设置了动态链接,但是现在我正在过滤 ListView 模板中的任何链接都附加了当前的 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'),
]

在模板中,我的链接如下所示:

    <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/

其中添加了“列表”以防止其他 url 错误匹配,如有必要,我可以添加,“全部”来自过滤器的动态变量,将是 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)

【问题讨论】:

  • 你在project_update_view中使用了什么重定向?
  • 不确定我是否设法将其放入其中,请参阅我更新后的问题以获取视图。
  • Alastair 成功了,不过还是一如既往地感谢您的帮助。

标签: django django-templates django-urls


【解决方案1】:

您需要在 URL 中添加前导斜杠,使其为绝对 URL,否则视为相对 URL。

<h3><a href="/{{ project.slug }}/update">{{ project.title }}</a></h3>

如果您使用{% url %} 标签而不是硬编码您的网址,则可以避免此类错误。

<h3><a href="{% 'project-update' project.slug %}">{{ project.title }}</a></h3>

如果您在应用的urls.py 中有app_name = 'yourapp',则将上面的'project-update' 更改为'yourapp:project-update'

【讨论】:

  • 你成功了!将在 6 分钟内将其标记为已解决。
猜你喜欢
  • 1970-01-01
  • 2014-07-02
  • 2017-03-05
  • 1970-01-01
  • 2011-06-03
  • 2021-08-07
  • 1970-01-01
  • 2010-11-16
  • 2012-01-26
相关资源
最近更新 更多