Erhalte zwei Zeichenfolgen in einer Variablen von der URL in Django

7

Ich habe Probleme, mehr als eine Variable zur Ansicht zu senden.

Meine urls.py ist wie folgt:

%Vor%

views.py

%Vor%

Also jetzt nimmt es von www.mydomain.com/rss/[anyything]/ und sendet "irgendetwas" zu meiner Ansicht. Ich möchte aber auch, dass es eine andere Zeichenfolge an views.py sendet, wie:

www.mydomain.com/rss/ [anynumber] / [anystring] /

Ich habe das versucht, aber das hat nicht funktioniert:

%Vor%

Aber das funktioniert nicht, es gibt diesen Fehler: Keyword-Argument wiederholt (urls.py, Zeile 17)

Also meine Frage: Wie kann ich es schaffen, zwei Strings von der URL mitzugeben?

    
Javaaaa 28.05.2011, 21:47
quelle

3 Antworten

26

Zunächst sollte der Regex-Teil wie folgt aussehen:

%Vor%

Diese Zeichenfolgen in den <...> -Teilen ermöglichen es Ihnen, einen Namen für die Übereinstimmung der Regex anzugeben. Django wird dann diesen Namen verwenden, um den Wert an Ihre Funktion zu übergeben. Daher muss Ihre Funktion ein Argument mit demselben Namen haben. In diesem Fall wird Django den Wert anynumber annehmen und diesen Wert für den Parameter Ihrer Funktion verwenden, der anynumber heißt. Dasselbe gilt für anystring , und dieses System befreit Sie davon, sich darum zu kümmern, in welcher Reihenfolge die Argumente Ihrer Funktion stehen.

\d+ wird mit einem oder mehreren numerischen Zeichen (Ziffern) übereinstimmen. Es empfiehlt sich, die Regex so zu beschränken, dass sie nur Zahlen entspricht, wenn dies beabsichtigt ist, und kein Zeichen und hoffen, dass nur Zahlen angezeigt werden. Wenn Sie den Ziffernbereich auf eine bestimmte Anzahl von Ziffern beschränken möchten, können Sie \d{1,4} verwenden, um eine bis vier Ziffern zu verwenden.

Der nächste Teil, (?P<anystring>.+) , fängt einen String ab, der aus einem oder mehreren beliebigen Zeichen besteht. Dies würde tatsächlich zu etwas wie 'letters/moreletters' passen, einschließlich des Schrägstrichs. Es gibt eine Reihe von "speziellen Sequenzen" in Python regex, die helfen könnten. Verwenden Sie \w wie in (?P<anystring>\w+) , um nur Ziffern, Buchstaben und das Unterstrichzeichen zu verwenden. Um laxer zu sein, aber Whitespace oder einen anderen Unsinn zu ignorieren, (?P<anystring>[a-zA-Z1-9:;_{}\[\]] , um eine ganze Reihe von Zeichen zu erfassen. Stellen Sie sicher, dass Sie alles, was ein Sonderzeichen in einer Regex sein könnte, umgehen. Sei jedoch konservativ. Wenn Sie zu viele Optionen zulassen, die wissen, welche Arten von Bugs Sie später herausfinden müssen.

Jetzt auf den Namensparameter der Funktion url . Dieser Name ist nicht, was es die gefangenen Muster zu Ihren Funktionen als übergeben wird. Es ist ein Name für eine bestimmte Aufrufklasse Ihrer Ansichtsfunktion, die in anderen Kontexten wie dem Schablonen-Tag {% url view-name arg1 arg2 %} als Short-Hand verwendet werden kann. Also, der Name, den Sie bereits haben, "alles", bezieht sich auf einen Aufruf Ihrer View-Funktion, indem Sie ein Schlüsselwort-Argument übergeben, das zufälligerweise irgendwas heißt. Für den Fall, dass Sie zwei Strings übergeben möchten, geben Sie einen Namen wie "rss-number-string" an, um die Argumente anzugeben, die Sie übernehmen möchten, oder einen Namen, der sich auf die spezielle Funktion bezieht, die Ihre Ansicht mit dieser Kombination ausführt.

Ich benutze immer mehrere Namen für die gleiche Funktion, und der Schlüssel ist dies:

%Vor%

Indem Sie den Parametern Standardwerte zuweisen, können Sie die gleiche Funktion auf verschiedene Arten verwenden. In diesem Fall kann die Funktion verwendet werden, wenn Sie nur einen Wert für anystring übergeben möchten oder wenn anystring und anynumber Werte haben sollen.

Ich weiß, das sind viele verschiedene Punkte, also werde ich versuchen, alles zusammen zu stellen, damit Sie sehen können, wie es funktionieren könnte. Um zwei URLs zu erhalten, eine, die eine Zeichenfolge abfängt und weiterleitet, und eine andere, die eine Zahl, einen Schrägstrich und dann eine Zeichenfolge abfängt, aber beide auf dieselbe Ansichtsfunktion verweisen, können Sie Folgendes verwenden:

%Vor%

Mit einer Ansicht Funktion wie folgt:

%Vor%

Bitte lassen Sie mich wissen, wenn dies hilft. Außerdem, Django rockt, so viel Lob!

Python-Regex-Bibliotheksdokumente

    
Kevin Ward 29.05.2011, 18:00
quelle
1

Sie brauchen dazu nicht unbedingt zwei Namensargumente anzugeben. Ich meine, Sie haben bereits die Variablennamen in Regex. Das eigentliche Problem ist, dass Sie nicht zwei Namensargumente angeben können. Sie können dies stattdessen tun:

%Vor%

BEARBEITEN:

Mit der oben genannten urlConf können Sie eine entsprechende Ansicht erstellen als:

%Vor%     
Hgeg 28.05.2011 21:59
quelle
0

Was soll name2 sein? Die Funktion url benötigt einen name -Parameter. Dies ist der Name der URL, wenn Sie sie umkehren, aber Sie können keine zufälligen zusätzlichen Funktionen einfügen.

Andernfalls haben Sie die richtige Syntax, um zwei Elemente an eine Ansicht zu senden. Da Sie die Variablennamen maskiert und nicht den tatsächlichen Fehler oder die Rückverfolgung bereitgestellt haben, können wir natürlich nicht wissen, was wirklich schief läuft.

    
Daniel Roseman 28.05.2011 22:02
quelle

Tags und Links