Ich glaube, der einfachste Weg wäre, den Code in mehrere Vorlagen (möglicherweise, einschließlich) zu teilen, so dass Sie nicht beide {% load django_tables %}
und {% load table_tags %}
(von Django-Datatable) in der gleichen Datei haben. Dies erfordert nichts Besonderes und würde mit jeder Django-Version funktionieren.
Wie zum Umbenennen, ich glaube nicht, dass es einen leicht verfügbaren Weg eingebaut ist. Es gibt eine Syntax nur bestimmte Tags/Filter ({% load render_table from table_tags %}
) zu importieren, aber keine Möglichkeit, sie umzubenennen.
Eine Möglichkeit besteht darin, benutzerdefiniertes Ladeprogramm zu implementieren. Sie sollten wahrscheinlich einen Blick auf django.template.defaulttags.load
Quellcode werfen, und kopieren Sie das, indem Sie Ihre eigene load_ex
mit einer benutzerdefinierten {% load_ex render_table as render_table_dt from table_tags %}
Syntax implementieren. Im Grunde genommen müssen Sie nur die erweiterte syntaktische Analyse hinzufügen und die Schlüssel lib.tags
umbenennen (es ist nur ein dict, das von einem Tag-Namen zu einer Funktion mappt), entsprechend den bereitgestellten Regeln.
Oder - ein dreckiger Ansatz - Haken in django.template.defaulttags.find_library
. Dort haben Sie sowohl die Bibliothek name
und parser
Beispiel so etwas wie folgt aus:
# Somewhere in your project's init code...
if not hasattr(defaulttags.find_library, "_is_hacked"):
real_find_library = defaulttags.find_library
def find_library(parser, name):
lib = real_find_library(parser, name)
if name == "django_tables2" and "render_table" in lib.tags:
lib.tags["render_table2"] = lib.tags["render_table"]
del lib.tags["render_table"]
return lib
find_library._is_hacked = True
defaulttags.find_library = find_library
Dies sollte ausreichen, um den Tag zu benennen. Ich habe den Code überhaupt nicht getestet (tut mir leid, wenn es irgendwelche Tippfehler oder einige Fehler gibt), aber Sie sollten die Idee bekommen.
Dies ist eine sehr schöne Lösung. Nur um hinzuzufügen, ist es notwendig, datable Tags vor django_tables Tags zu laden, da render_table nicht nicht registriert ist. –