2016-04-26 8 views
0

Zunächst funktioniert dieser Code in meiner lokalen Testumgebung, funktioniert aber nicht in unserer Staging-Umgebung.Django 1.8: NoReverseMatch-Fehler

Der Fehler Ich erhalte is-

Reverse for 'myaccounttempid' with arguments '('---URL_SAFE_BASE64_HASH_HERE---',)' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 

In My urls.py, ich habe

url(r'^accounts/my-account/temporary-id/(?P<member_id>[A-Za-z0-9=_\-]+)/$', my_account_temporary_id, 
    name='myaccounttempid'), 

In My Template, ich habe

<a href="{% url 'myaccounttempid' member.member_id|encode_for_url %}">Link</a> 

In models.py Ich habe

def my_account_temporary_id(request, member_id): 
    member_id = decode_value_from_url(member_id) 

Ich habe versucht, den Member-ID-Hash mit * Args und ** Kwargs beim Debuggen übergeben. Das scheint etwas zu sein, das einfach sein sollte ... was fehlt mir?


Hier ist der Code für die Funktion der cutom Template-Tag encode_for_url

def encode_value_for_url(original_value): 
    """First base 64 encodes a value, cryptographically signs it and then base 64 encodes it again.""" 
    signer = Signer() 
    encoded_data = base64.urlsafe_b64encode(original_value) 
    signed_data = signer.sign(encoded_data) 

    return base64.urlsafe_b64encode(signed_data) 
+0

Was gibt der Filter 'encode_for_url' zurück? – Gocht

+0

encode_for_url gibt die url safe base64-Zeichenfolge zurück, die tatsächlich an die Funktion gesendet wird. – avryhof

+0

Verwenden Sie einen Namespace zum Einschließen von URLs? – Alasdair

Antwort

0

Meine Funktion wurde ignoriert, da ich Reportlab verwendete und Reportlab nicht auf dem Staging-Server installiert war. Sobald ich das aufgesetzt habe, hat es funktioniert.

0

Sie ruft sollten

[A-Za-z0-9=\-_] 

den Bindestrich mit einem Backslash Oder man kann es bis zum Ende bewegen der Gruppe

[A-Za-z0-9=_-]`. 

Momentan wird =-_ als der Bereich von = bis _ behandelt, der - nicht enthält.

+0

Ich hätte gemerkt, dass grundlegende RegEx nein nein. Ich werde meinen Code oben entsprechend anpassen, aber das hat immer noch nicht den Zweck erfüllt. Es läuft immer noch auf meinem lokalen Computer, aber nicht auf dem Staging-Server. Der einzige Konfigurationsunterschied, den ich sehen kann, ist die Python-Version - Auf meinem lokalen Rechner habe ich 2.7.10 und der Server 2.7.3 – avryhof

Verwandte Themen