Seite 1 von 1
[django] Wie link in's Admin Interace bauen?
Verfasst: Freitag 20. März 2009, 10:06
von jens
Ich frage mich gerade, wie ich einen Link ins django admin Interface bauen kann ohne die url zu hardcoden.
Ich möchte gern direkt zur Liste eines Modells sprigen. Ich dachte eigentlich seid newforms-admin würden named urls generiert werden. Wird es aber wohl nicht...
Jemand eine Idee?
Verfasst: Freitag 20. März 2009, 14:52
von apollo13
Mensch, schau doch in den source, natürlich werden inzwischen named urls generiert, admin.site.root ist schon lang deprecated, include(admin.site.urls) ist was du verwenden willst...
Verfasst: Freitag 20. März 2009, 15:57
von jens
Das hast du mich IMHO falsch verstanden. Im übrigen geht's um django 1.0.x...
Ich hab mit contrib.admin.sites angesehen. In meine urls.py binde ich das auch richtig ein... Es geht darum, wie man ein url reverse to einem bestimmten punkt im django panel hinbekommt... Geht das erst ab django v1.1.x?
Verfasst: Freitag 20. März 2009, 20:57
von apollo13
Es wurde irgendwann zwischen 1.0 und 1.1 eingeführt (
http://code.djangoproject.com/changeset/9739), vlt hättest gleich sagen sollen was du verwendest

und ja da geht reverse, da urlresolvers verwendet werden... Wie die ganzen names sind siehst du in der Funktion get_urls von den Site und AdminOption objects...
Verfasst: Freitag 17. April 2009, 16:00
von jens
Nun geht's aber um die aktuelle django SVN trunk Version.
Das geht irgendwie nicht:
Code: Alles auswählen
class PreferenceAdmin(admin.ModelAdmin):
def edit_link(self, instance):
""" For adding a edit link into django admin interface """
# http://docs.djangoproject.com/en/dev/ref/contrib/admin/#reversing-admin-urls
#admin_{{ app_label }}_{{ model_name }}_add
#print reverse("admin_dbpreferences_preference_add")
# wirft: NoReverseMatch
context = {
# wirft: NoReverseMatch:
"edit_url": reverse("admin_dbpref_edit_form", kwargs={"pk": instance.pk}),
"item": instance,
}
return render_to_string('dbpreferences/model_admin_edit_link.html', context)
edit_link.allow_tags = True
def edit_form(self, pk):
...mach was...
def get_urls(self):
urls = super(PreferenceAdmin, self).get_urls()
my_urls = patterns('',
url(r'^(?P<pk>\d+)/edit_form/$', self.admin_site.admin_view(self.edit_form),
name="admin_dbpref_edit_form")
)
return my_urls + urls
list_display = ("site","app_label", "form_name", "edit_link",)
Ein
{% url admin_dbpref_edit_form %} im Template, wirft auch nur ein NoReverseMatch...
Irgendwie scheint die urls einfach nicht mit den urls aus get_urls() aufgefüllt worden zu sein...
Jemand eine Idee???
Verfasst: Freitag 17. April 2009, 18:09
von apollo13
Ja, wie hast du das ganze in der Urlconf verlinkt?
Verfasst: Freitag 17. April 2009, 18:55
von jens
Mit:
Code: Alles auswählen
(r'^%s/(.*)' % settings.ADMIN_URL_PREFIX, admin.site.root),
Muß man die erweiterten ModelAdmin urls zusätzlich angeben? Dann macht doch get_urls() nicht wirklich Sinn, oder?
EDIT: Moment mal... Braucht man vielleicht genau dafür
admin.autodiscover() ?
EDIT2: Auch mit einem admin.autodiscover() geht's nicht...
Verfasst: Freitag 17. April 2009, 20:55
von apollo13
admin.site.root ist deprecated, wie ich schon ein paar Posts davor geschrieben habe,
http://docs.djangoproject.com/en/dev/re ... ur-urlconf
EDIT:// Und damit es alle verstehen, es ist deshalb deprecated, weil mit admin.site.root die urlresolvers nicht funktionieren

Verfasst: Freitag 17. April 2009, 21:01
von jens
Super, das war es!
kommt davon wenn man code per copy&paste wieder verwendet... Wäre eigentlich schön, wenn django ein warning wirf.