Seite 1 von 1
Django URL-Patterns
Verfasst: Sonntag 20. Juni 2010, 23:34
von bugzz
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
Re: Django URL-Patterns
Verfasst: Montag 21. Juni 2010, 10:12
von .robert
bugzz hat geschrieben:Was mache ich falsch?!
Du vergisst das 'search' in der Url
-----
Edit: Oh, da habe ich nicht richtig gelesen, sorry, überlies meinen Beitrag einfach

Re: Django URL-Patterns
Verfasst: Montag 21. Juni 2010, 13:39
von bugzz
Ä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>
...
Re: Django URL-Patterns
Verfasst: Montag 21. Juni 2010, 15:18
von /me
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)
...
Re: Django URL-Patterns
Verfasst: Montag 21. Juni 2010, 18:19
von jens
Slash am ende?
Re: Django URL-Patterns
Verfasst: Montag 21. Juni 2010, 20:11
von bugzz
/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 ?!
Re: Django URL-Patterns
Verfasst: Montag 21. Juni 2010, 20:19
von Leonidas
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.
Re: Django URL-Patterns
Verfasst: Montag 21. Juni 2010, 21:14
von bugzz
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

Re: Django URL-Patterns
Verfasst: Montag 21. Juni 2010, 21:28
von /me
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.

Re: Django URL-Patterns
Verfasst: Montag 21. Juni 2010, 23:21
von bugzz
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 ?!
Re: Django URL-Patterns
Verfasst: Montag 21. Juni 2010, 23:23
von Leonidas
Ja, könnte es genausogut.