gpt4 book ai didi

python - 在 django admin 中覆盖模板

转载 作者:行者123 更新时间:2023-11-28 22:29:20 29 4
gpt4 key购买 nike

我正在使用 Django 1.11

  1. 我能够扩展/覆盖一个名为 change_form.html

    的模板

    我把这个文件放在 /templates/admin/my_app/my_model/

    对于这个,我扩展并更改了一个 block ,就像在 example 中一样在 django 文档中

  2. 无法覆盖一个名为 submit_line.html

    的模板

    我尝试将它放在 /templates/admin//templates/admin/my_app//templates/admin/my_app/my_model/。都没有用。

    我编辑了 django/contrib 下的文件并且它有效,但我不想更改那个文件。只是看内容是否显示。

我只想在模板中添加一个按钮,以便用户可以下载一个 XML 文件。

最佳答案

经过一些测试和研究,这里是解决方案。

首先,在/templates/admin/my_app/my_model/下面复制粘贴 submit_line.html来自 django/contrib/admin/templates/admin/ .

更改 submit_line.html并添加您喜欢的任何网址。说:

<!-- submit_line.html -->

{% load i18n admin_urls %}
<div class="submit-row">
{% if show_save %}<input type="submit" value="{% trans 'Save' %}" class="default" name="_save" />{% endif %}
{% if show_delete_link %}
{% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %}
<p class="deletelink-box"><a href="{% add_preserved_filters delete_url %}" class="deletelink">{% trans "Delete" %}</a></p>
{% endif %}

<!-- NEW SUBMIT INPUTS -->
<input type="submit" value="TEST" name="_saveasnewss" />
<input type="submit" value="TEST 2" name="_saveasnews" />
<!-- END NEW SUBMIT INPUTS -->

{% if show_save_as_new %}<input type="submit" value="{% trans 'Save as new' %}" name="_saveasnew" />{% endif %}
{% if show_save_and_add_another %}<input type="submit" value="{% trans 'Save and add another' %}" name="_addanother" />{% endif %}
{% if show_save_and_continue %}<input type="submit" value="{% trans 'Save and continue editing' %}" name="_continue" />{% endif %}
</div>

我们正在复制粘贴它,因为没有任何 {% block %} change_form.html 内的标签覆盖。

进一步,在 change_form.html 中,添加这些:

<!-- change_form.html -->

{% extends "admin/change_form.html" %}

{% load my_app_tags %} /* Change "my_app" to your app name that will contain the 'submit_row' template tag */

OTHER OVERRIDES HERE

{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}

最后,在您应用的 templatetags 中,添加这个模板标签:

# my_app/templatetags/my_app_tags.py

from django.contrib.admin.templatetags.admin_modify import submit_row
from django.template.loader import get_template
from django import template

# this would be the path to your "submit_line.html"
t = get_template('admin/my_app/my_model/submit_line.html')
register = template.Library()
register.inclusion_tag(t, takes_context=True)(submit_row)

就是这样!现在你应该看到这些额外的 <input type="submit" />仅在 my_model 下添加/更改页面。如果你想在全局范围内使用它们,只需移动 submit_line.html从哪里到templates/admin/ .不要忘记更新 my_app/templatetags/my_app_tags.py 中的路径也是。

关于python - 在 django admin 中覆盖模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43101382/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com