【问题标题】:Django - add link with custom admin page hrefDjango - 添加带有自定义管理页面href的链接
【发布时间】:2021-05-09 09:33:07
【问题描述】:

在我的 Django 项目中,我通过 get_urls() 方法为应用创建了一个自定义管理页面。我想添加一个指向应用程序主模型索引视图的链接,该视图将用户带到此自定义页面 - 但是,我在正确创建此链接元素时遇到了一些问题,而且我似乎无法拼凑正确的方法 - 我只剩下一个 Reverse for 'export' not found. 'export' is not a valid view function or pattern name. 错误。

我已经为应用设置了管理员,如下所示:

# my_project/observations/admin.py

from django.template.response import TemplateResponse
from django.urls import path

class ObservationAdmin(SimpleHistoryAdmin, SoftDeletionModelAdmin):
    change_list_template = 'export_link.html'

    def get_urls(self):
        urls = super().get_urls()
        custom_urls = [
            path('export/', self.admin_site.admin_view(self.export_view), name='export')
        ]

        return custom_urls + urls

    def export_view(self, request):
        context = dict(
           self.admin_site.each_context(request),
        )

        return TemplateResponse(request, 'export.html', context)

以及引用的两个模板:

# my_project/observations/templates/export.html

{% extends "admin/base_site.html" %}
{% block content %}
<div>
    Some custom content
</div>
{% endblock %}
# my_project/observations/templates/export_link.html

{% extends 'admin/change_list.html' %}

{% block object-tools-items %}
    <li>
        <a href="{% url 'export' %}" class="btn btn-high btn-success">Export</a>
    </li>
    {{ block.super }}
{% endblock %}

直接导航到http://localhost:8000/admin/observations/observation/export/ 效果很好,我看到的自定义内容页面完全符合我的要求......所以我遇到的问题是链接模板 - 当我导航到时出现Reverse... 错误模型索引页面。

也许我传递给 url 的参数不正确,或者我需要在其他地方注册该 URL - 但我不太清楚。我能够找到的其他此类链接元素示例不引用通过管理类的 get_urls() 方法创建的 URL - 因此,我们将不胜感激任何有关这方面的指导。

非常感谢,如果我能提供任何其他信息来帮助解决这个问题,请告诉我。

【问题讨论】:

    标签: django


    【解决方案1】:

    我认为问题在于您的export_link.html 模板中缺少namespace。而不是:

    <a href="{% url 'export' %}" class="btn btn-high btn-success">Export</a>
    

    尝试:

    <a href="{% url 'admin:export' %}" class="btn btn-high btn-success">Export</a>
    

    【讨论】:

    • 谢谢!这太棒了 - 在其他示例中,我已经看到命名空间很重要,但我不清楚它如何应用在这里。非常感谢。
    猜你喜欢
    • 2011-01-10
    • 2012-04-10
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 2018-06-01
    相关资源
    最近更新 更多