[django] Wie link in's Admin Interace bauen?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

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...
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

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...
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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???

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Ja, wie hast du das ganze in der Urlconf verlinkt?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

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 ;)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Super, das war es!

kommt davon wenn man code per copy&paste wieder verwendet... Wäre eigentlich schön, wenn django ein warning wirf.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten