Ich habe ein Django-Modell mit einer großen Anzahl von Feldern und mehr als 20000 Tabellenzeilen. Um die Menschen lesbare URLs und die Fähigkeit, zu erleichtern die große Liste in beliebige Teillisten zu brechen, würde Ich mag eine URL haben, die wie folgt aussieht:Django: Beliebige Anzahl unbenannter urls.py-Parameter
/browse/<name1>/<value1>/<name2>/<value2>/ .... etc ....
wo ‚name‘ Karten auf ein Modell Attribut und ‚Wert‘ ist das Suchkriterium für dieses Attribut. Jeder "Name" wird wie eine Kategorie behandelt, um Teilmengen der Modellinstanzen zurückzugeben, in denen die Kategorien übereinstimmen.
Jetzt könnte dies mit GET-Parameter behandelt werden, aber ich bevorzuge mehr lesbare URLs für den Benutzer und die Suchmaschinen. Diese URL-Untergruppen werden auf jeder Seite eingebettet, auf der dieses Modell angezeigt wird. Es lohnt sich also, schöne URLs zu erstellen.
Im Idealfall wird jeder Name/Wert-Paar in die View-Funktion als Parameter übergeben name1
genannt, name2
usw. Aber ich glaube nicht, dass es über einen regulären Ausdruck des angepassten Text definiert benannte Muster möglich ist. Liege ich da falsch?
Also, es scheint, dass ich so etwas wie dies tun müssen:
urlpatterns = patterns('',
url(r'^browse/(?:([\w]+)/([\w]+)/)+$', 'app.views.view', name="model_browse"),
)
Es scheint dies keine Sets von zwei Name/Wert-Paare passen sollte. Während es erfolgreich übereinstimmt, übergibt es nur das letzte Name/Wert-Paar als Parameter an die View-Funktion. Meine Vermutung ist, dass jedes Spiel das vorherige Spiel überschreibt. Unter der Vermutung, dass die enthält (?: ...) + verursacht es, habe ich versucht, ein einfaches wiederholendes Muster statt:
urlpatterns = patterns('',
url(r'^browse/([\w]+/)+$', 'app.views.view', name="model_browse"),
)
... und bekam das gleiche Problem, aber dieses Mal *args
enthält nur die letzten passendes Muster.
Ist dies eine Einschränkung von Djangos URL-Dispatcher und/oder Pythons Regex-Unterstützung? Es scheint, dass eine dieser Methoden funktionieren sollte. Gibt es eine Möglichkeit, dies zu erreichen, ohne jedes mögliche Modellattribut in der URL als optionales (. *) Muster zu kodieren?
denke ich, dass „GET-Abfrage wie“ implementieren Schlüssel-Wert-params URL selbst ein bisschen hässlich ist und nicht „true“. –
@alex - abgesehen davon, dass die URL nicht lesbar ist, werden Suchmaschinen wahrscheinlich nicht alle Ihre Inhalte indexieren, wenn Sie mehr als ein paar Parameter haben (wenn das). –