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

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

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

Beitragvon jens » Freitag 20. März 2009, 10:06

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?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Beitragvon apollo13 » Freitag 20. März 2009, 14:52

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Freitag 20. März 2009, 15:57

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?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Beitragvon apollo13 » Freitag 20. März 2009, 20:57

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Freitag 17. April 2009, 16:00

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Beitragvon apollo13 » Freitag 17. April 2009, 18:09

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

Beitragvon jens » Freitag 17. April 2009, 18:55

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Beitragvon apollo13 » Freitag 17. April 2009, 20:55

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Freitag 17. April 2009, 21:01

Super, das war es!

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder