我正在使用Django(+ django-grappelli + mezzanine)创建一个网站,我想自定义管理面板以添加新的信息中心,以显示特定的模型实例。
让我们说我有一个模特:
class Thing(models.Model):
published = models.BooleanField(default=False)
还有几个模型实例(例如T1,T2,T3,其中T1和T2已发布但未发布T3),我希望有一个仪表板显示所有的列表" Thing& #34;未发布的实例(在本例中为T3)。
有什么想法吗?谢谢你的阅读!
答案 0 :(得分:1)
好的,我找到了解决方案。以下是指南:
Mezzanine允许用户自定义其仪表板,并提供功能并将其注册为包含标签。
文档:http://mezzanine.jupo.org/docs/admin-customization.html - >仪表板https://docs.djangoproject.com/en/1.7/howto/custom-template-tags/#inclusion-tags
要实现此类功能,您需要执行以下步骤:
1)在您的应用程序中添加 templatetags文件夹(不要忘记 __ init __。py 文件)并在此处创建一个名为“your_tags.py”的文件封装
2)在此新文件中,添加一个功能,以便向要在“仪表板”面板中添加的新仪表板提供数据。它看起来像这样:
from mezzanine import template
from your_app.models import Thing
register = template.Library()
@register.inclusion_tag('unpublished_things.html')
def show_unpublished_things():
plugins = Thing.objects.filter(published=False)
return {'things':things}
3)然后,您需要创建包含标记中使用的“unpublished_things.html”文件,例如,在应用程序的模板文件夹中创建此类文件。该文件可能如下所示(假设Thing模型中存在“get_admin_url”函数):
{% load i18n %}
<div class="group-collapsible">
<div class="module">
<table>
<caption>Unpublished things</caption>
{% for thing in things %}
<tr>
<th scope="row" width="100%"><a
href="{{ thing.get_admin_url }}">{{ thing.name }}</a></th>
<td> </td>
<td> </td>
</tr>
{% endfor %}
</table>
</div>
</div>
4)要完成,您只需在 local_settings.py (或settings.py)中添加以下内容:
DASHBOARD_TAGS = (
("your_tags.show_unpublished_things", "mezzanine_tags.app_list"),
("comment_tags.recent_comments",),
("mezzanine_tags.recent_actions",),
)
此配置将自动添加由管理面板的控制面板中第一行顶部的“show_unpublished_things”功能提供的生成内容。
如果收到错误,请不要忘记重新启动服务器!
答案 1 :(得分:0)
听起来你想要的是带有自定义list_filter的ModelAdmin,如下所示:https://docs.djangoproject.com/en/1.5/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter
例如,在与models.py相同的文件夹中,您将创建一个类似于以下内容的admin.py:
from django.contrib import admin
from .models import Thing
class ThingAdmin(admin.ModelAdmin):
list_filter = ('published',)
admin.site.register(Thing, ThingAdmin)
这会在您的管理网站中为您的Thing对象提供一个新部分,并允许您根据它们是否已发布来过滤它们。