Django URL-Patterns

Django, Flask, Bottle, WSGI, CGI…
Antworten
Benutzeravatar
bugzz
User
Beiträge: 20
Registriert: Donnerstag 17. Juni 2010, 11:38

Hallo, ist zwar nicht gut so ein alter thread aufzubuddeln, aber, ich denke, es ist besser als einen neuen zu erstellen

Also, es geht um string (eg. slug -> [a-z], [_] und [-]) den ich ausm url nehmen möchte und weiter verarbeiten.
z.B. http://localhost:8000/books/search/publ ... publishing[/b]
dieses apress-publishing (was ursprünglish Apress Publishing war) möchte ich in einem view schnappen und weiter verarbeiten.

im moment habe ich das so gelöst:

urls.py

Code: Alles auswählen

urlpatterns = patterns('',
...
(r'^books/search/', include('mysite.books.books_urls')),
...
)
books_urls.py

Code: Alles auswählen

urlpatterns = patterns('',
    (r'^$', books_app_views.books_search_form),
    (r'^publisher/(\w[a-z0-9-]+)/$', books_app_views.books_tags_publishers)
    )
Ich habe schon verscuht das so umzuschreiben
books_urls.py

Code: Alles auswählen

...
(r'^publisher/(?P<slug>+)/$', books_app_views.books_tags_publishers)
...
aber jedesmal bekomme ich eine Page not found (404) fehlermeldung.

Was mache ich falsch?!

P.S. Bin kein profi in RegEx
Zuletzt geändert von Leonidas am Montag 21. Juni 2010, 01:23, insgesamt 1-mal geändert.
Grund: Neuen Thread erstellt, da unverwandt
Deutsch ist nicht meine Muttersprache
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

bugzz hat geschrieben:Was mache ich falsch?!
Du vergisst das 'search' in der Url
bugzz hat geschrieben:z.B. http://localhost:8000/books/search/publisher/apress-publishing


-----
Edit: Oh, da habe ich nicht richtig gelesen, sorry, überlies meinen Beitrag einfach :oops:
Benutzeravatar
bugzz
User
Beiträge: 20
Registriert: Donnerstag 17. Juni 2010, 11:38

Ähmm ich denke nicht, /search/ ist immer present.
Sonst würde das

Code: Alles auswählen

(r'^publisher/(\w[a-z0-9-]+)/$', books_app_views.books_tags_publishers)
nicht funktionieren.

Nein, ich denke, das Problem ist in RegEx mit dem <slug>.

Gestern habe ich bisschen umgeschrieben:

urls.py (in projekt-verzeichniss)

Code: Alles auswählen

urlpatterns = patterns('',
  ...
  #Books-App
  (r'^books/', include('mysite.books.books_urls')), 
  #beim http://localhost:8000/books/ werden die URLPatterns aus mysite.books.books_urls.py geladen/inkludiert
  ... 
)
books_ulrs.py

Code: Alles auswählen

from mysite.books import views as books_app_views
...
urlpatterns = patterns('',
    (r'^search/$', books_app_views.books_search_form), #funktioniert beim http://localhost:8000/books/search
    (r'^publisher/(\w[a-z0-9-]+)/$', books_app_views.books_tags_publishers) #funktioniert beim http://localhost:8000/books/publisher/apress-publishing/
    (r'^publisher/(?P<slug>+)/$', books_app_views.books_tags_publishers) #funktioniert gar nicht. Fehler: error at /books/search/ nothing to repeat
    )
hier ist nicht eine Ausschnitt aus mysite.books.views.py

Code: Alles auswählen

...
def books_tags_publishers(requst, pub_name):
    if pub_name:
        return HttpResponse('Der <strong>%s</strong> Verlag:' % pub_name)
...
und hier is ein Ausschnit ausm template wo die lnks zu http://localhost:8000/books/publisher/<publisher_name>/ generiert werden:

Code: Alles auswählen

...
           <fieldset>
                <legend>Verlag-Tags</legend>
                <p>
                    {% if pub_tags_dict %}
                       {% for pub_tag in pub_tags_dict %}
                       <a href="/books/publisher/{{pub_tag|slugify}}">
                           {{pub_tag}}</a>
                       {% endfor %}
                    {% else%}
                        Keine pub_tags
                    {% endif %}
                </p>
            </fieldset>
...
Deutsch ist nicht meine Muttersprache
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

bugzz hat geschrieben:books_urls.py

Code: Alles auswählen

urlpatterns = patterns('',
    (r'^$', books_app_views.books_search_form),
    (r'^publisher/(\w[a-z0-9-]+)/$', books_app_views.books_tags_publishers)
    )
Ich habe schon verscuht das so umzuschreiben
books_urls.py

Code: Alles auswählen

...
(r'^publisher/(?P<slug>+)/$', books_app_views.books_tags_publishers)
...
aber jedesmal bekomme ich eine Page not found (404) fehlermeldung.
Du hast ja auch den Teil der den Text suchen soll weggelassen.

Code: Alles auswählen

...
(r'^publisher/(?P<slug>\w[a-z0-9-]+)/$', books_app_views.books_tags_publishers)
...
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Slash am ende?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
bugzz
User
Beiträge: 20
Registriert: Donnerstag 17. Juni 2010, 11:38

/me hat geschrieben: Du hast ja auch den Teil der den Text suchen soll weggelassen.

Code: Alles auswählen

...
(r'^publisher/(?P<slug>\w[a-z0-9-]+)/$', books_app_views.books_tags_publishers)
...
Achso. Okay. Hmm ich dachte wenn ich (?P<slug>) als RegEx reklariere dann brauche ich die \w[a-z0-9-]+ Maske gar nicht. Hamm hat das überhaupt irgendwelche vorteile statt r'^publisher/(\w[a-z0-9-]+)/$' slug-version r'^publisher/(?P<slug>\w[a-z0-9-]+)/$' zubenutzen ?!
Deutsch ist nicht meine Muttersprache
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Naja, so ist dein Parameter benamt und du kannst im Callback dann den Parameter ``slug`` nennen und an beliebiger Stelle in der Signatur stehen haben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
bugzz
User
Beiträge: 20
Registriert: Donnerstag 17. Juni 2010, 11:38

Hmm, den URLPattern habe ich aktualisiert, bekomme aber weiterhin eine Fehlermeldung.
TypeError at /books/publisher/apress-publishing
books_tags_publishers() got an unexpected keyword argument 'slug'

Request Method: GET
Request URL: http://localhost:800/books/publisher/apress-publishing
Django Version: 1.2.1
Exception Type: TypeError
Exception Value: books_tags_publishers() got an unexpected keyword argument 'slug'
Exception Location: /usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py in get_response, line 100
Python Executable: /usr/bin/python
Python Version: 2.6.5
Leonidas hat geschrieben:Naja, so ist dein Parameter benamt und du kannst im Callback dann den Parameter ``slug`` nennen und an beliebiger Stelle in der Signatur stehen haben.
Ähm, okay, muss weiter das Buch lesen. Versteh nicht welcher Callback und welcher Signatur
gemeint werden :oops:
Deutsch ist nicht meine Muttersprache
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

bugzz hat geschrieben:
TypeError at /books/publisher/apress-publishing
books_tags_publishers() got an unexpected keyword argument 'slug'
Du hast den regulären Ausdruck so umgebaut, dass die Funktion books_tags_publishers() zwingend einen Parameter mit dem Namen "slug" haben muss. Nun hat die Funktion aber offensichtlich keinen solchen Parameter.

So, das war jetzt schön erklärt und das, ohne die Wörter "Callback" und "Signatur" zu erwähnen. ;-)
Benutzeravatar
bugzz
User
Beiträge: 20
Registriert: Donnerstag 17. Juni 2010, 11:38

Aha! Jetzt verstanden.
P.S. Kann ich auf der Art und Weise die, aus den URLs "geschanppten", Parameter beliebig bennen. Ich mein, jetzt habe ich <slug> könnte es auch <pub_tag_name> sein ?!
Deutsch ist nicht meine Muttersprache
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ja, könnte es genausogut.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten