Hier ist das Snippet Emmanuel verwendet, aktualisiert Django 1.8:
In templatetags/admin_reorder.py:
from django import template
from django.conf import settings
from collections import OrderedDict
register = template.Library()
# from http://www.djangosnippets.org/snippets/1937/
def register_render_tag(renderer):
"""
Decorator that creates a template tag using the given renderer as the
render function for the template tag node - the render function takes two
arguments - the template context and the tag token
"""
def tag(parser, token):
class TagNode(template.Node):
def render(self, context):
return renderer(context, token)
return TagNode()
for copy_attr in ("__dict__", "__doc__", "__name__"):
setattr(tag, copy_attr, getattr(renderer, copy_attr))
return register.tag(tag)
@register_render_tag
def admin_reorder(context, token):
"""
Called in admin/base_site.html template override and applies custom ordering
of apps/models defined by settings.ADMIN_REORDER
"""
# sort key function - use index of item in order if exists, otherwise item
sort = lambda order, item: (order.index(item), "") if item in order else (
len(order), item)
if "app_list" in context:
# sort the app list
order = OrderedDict(settings.ADMIN_REORDER)
context["app_list"].sort(key=lambda app: sort(order.keys(),
app["app_url"].strip("/").split("/")[-1]))
for i, app in enumerate(context["app_list"]):
# sort the model list for each app
app_name = app["app_url"].strip("/").split("/")[-1]
if not app_name:
app_name = app["name"].lower()
model_order = [m.lower() for m in order.get(app_name, [])]
context["app_list"][i]["models"].sort(key=lambda model:
sort(model_order, model["admin_url"].strip("/").split("/")[-1]))
return ""
In Einstellungen.py:
ADMIN_REORDER = (
('app1', ('App1Model1', 'App1Model2', 'App1Model3')),
('app2', ('App2Model1', 'App2Model2')),
)
(Ihre eigenen App-Namen einfügen hier Admin platzieren werden Anwendungen oder Modelle am Ende der Liste fehlt, so lange, wie Sie mindestens zwei Modelle in jeder App-Liste..)
in Ihrer Kopie von base_site.html:
{% extends "admin/base.html" %}
{% load i18n admin_reorder %}
{% block title %}{{ title }} | {% trans 'Django site admin' %}{% endblock %}
{% block branding %}
{% admin_reorder %}
<h1 id="site-name">{% trans 'Django administration' %}</h1>
{% endblock %}
{% block nav-global %}{% endblock %}
Das ist gut zu wissen, aber ich denke, die Frage im Zusammenhang mit ein paar Model-Klassen in der gleichen installierten App. Das Ändern der Reihenfolge der Apps würde Ihnen nicht helfen, wenn Sie die Reihenfolge Ihrer Modellklassen innerhalb einer einzelnen App ändern möchten. – Jeff
Es ist gut zu denken. Sie müssen irgendwo aufgelistet sein und vielleicht muss ich dort nur einen Sortierfilter anwenden. Ich werde mir das morgen ansehen (europäische Zeitzone hier ...) Danke –