我的管理面板中有简单的结果列表。例如,它是这样的:
id名称描述类别
在我的管理面板中有结果列表,其中包含类" row1"," row2"。我想根据obj值添加另一个类(obj.group_id未列出)。我的意思是:
if obj.group_id == 2:
add class "premium" to result list item # whole row with this item
我想简单区分django管理面板中的某些行。 我不知道如何实现这一目标。有线索吗?
我可以在一列上更改css。例如:
def show_url(self, obj):
if obj.group.group_name == 'Premium':
return format_html(
'<span class="premium"><a style="color:blue" href="{}">{}</a></span>'.format(obj.url, obj.url)
)
return '<a style="color:blue" href="{}">{}</a>'.format(obj.url, obj.url)
show_url.allow_tags = True
show_url.short_description = "Url"
我想为整行设置不同的背景......
答案 0 :(得分:0)
Django没有做出你认为轻松的任务......
首先,您需要创建一个新的template_tags:
我调用了文件 admin_override.py
# -*- coding: utf-8 -*-
from django.contrib.admin.templatetags.admin_list import (
ResultList, items_for_result,
result_headers, result_hidden_fields
)
from django.template import Library
register = Library()
def results(cl):
if cl.formset:
for res, form in zip(cl.result_list, cl.formset.forms):
yield ResultList(form, items_for_result(cl, res, form))
else:
for res in cl.result_list:
yield {
'class': res.admin_css_class,
'items': ResultList(None, items_for_result(cl, res, None))
}
@register.inclusion_tag("admin/change_list_results_with_class.html")
def result_list_with_class(cl):
"""
Displays the headers and data list together
"""
headers = list(result_headers(cl))
num_sorted_fields = 0
for h in headers:
if h['sortable'] and h['sorted']:
num_sorted_fields += 1
return {'cl': cl,
'result_hidden_fields': list(result_hidden_fields(cl)),
'result_headers': headers,
'num_sorted_fields': num_sorted_fields,
'results': list(results(cl))}
这个新的template_tag返回一个dict列表而不是ResultList列表,并将渲染模板更改为&#34; admin / change_list_results_with_class.html&#34;。
然后您需要覆盖 change_list.html ,例如answer
{% extends "admin/change_list.html" %}
{% load i18n admin_urls static admin_list admin_override%}
{% block result_list %}
{% if action_form and actions_on_top and cl.show_admin_actions %}{% admin_actions %}{% endif %}
{% result_list_with_class cl %}
{% if action_form and actions_on_bottom and cl.show_admin_actions %}{% admin_actions %}{% endif %}
{% endblock %}
最后你创建 admin / change_list_results_with_class.html
{% load i18n static %}
{% if result_hidden_fields %}
<div class="hiddenfields">{# DIV for HTML validation #}
{% for item in result_hidden_fields %}{{ item }}{% endfor %}
</div>
{% endif %}
{% if results %}
<div class="results">
<table id="result_list">
<thead>
<tr>
{% for header in result_headers %}
<th scope="col" {{ header.class_attrib }}>
{% if header.sortable %}
{% if header.sort_priority > 0 %}
<div class="sortoptions">
<a class="sortremove" href="{{ header.url_remove }}" title="{% trans "Remove from sorting" %}"></a>
{% if num_sorted_fields > 1 %}<span class="sortpriority" title="{% blocktrans with priority_number=header.sort_priority %}Sorting priority: {{ priority_number }}{% endblocktrans %}">{{ header.sort_priority }}</span>{% endif %}
<a href="{{ header.url_toggle }}" class="toggle {% if header.ascending %}ascending{% else %}descending{% endif %}" title="{% trans "Toggle sorting" %}"></a>
</div>
{% endif %}
{% endif %}
<div class="text">{% if header.sortable %}<a href="{{ header.url_primary }}">{{ header.text|capfirst }}</a>{% else %}<span>{{ header.text|capfirst }}</span>{% endif %}</div>
<div class="clear"></div>
</th>{% endfor %}
</tr>
</thead>
<tbody>
{% for result in results %}
{% if result.form.non_field_errors %}
<tr><td colspan="{{ result|length }}">{{ result.form.non_field_errors }}</td></tr>
{% endif %}
<tr class="{% cycle 'row1' 'row2' %} {{ result.class }}">{% for item in result.items %}{{ item }}{% endfor %}</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endif %}
您在模型中添加了一项功能:
@property
def admin_css_class(self):
return 'my_class'
这是经过测试和运作的。