2016-04-26 130 views
0

首先,這段代碼適用於我的本地測試環境,但無法在我們的臨時環境中工作。Django 1.8:NoReverseMatch錯誤

的錯誤我得到是 -

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

在我的urls.py,我有

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

在我的模板,我有

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

在models.py ,我有

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

我曾嘗試在調試時將成員ID哈希與* args和** kwargs一起傳遞。這似乎是應該很簡單的事情......我錯過了什麼?


下面是該函數的對自定義模板標籤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

什麼是過濾器'encode_for_url'返回? – Gocht

+0

encode_for_url正在返回實際進入函數的url安全base64字符串。 – avryhof

+0

您是否在使用名稱空間來包含網址? – Alasdair

回答

0

它忽略了我的功能,因爲我使用的是Reportlab,而Reportlab沒有安裝在Staging服務器上。一旦我把它,它的工作。

0

你應該逃避連字符用反斜槓

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

或者你可以將它移動到結束的代碼的組

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

目前,=-_被視爲範圍從=_,其實際上不包括-

+0

我應該注意到基本的RegEx no no。我會適當地調整我的代碼,但這仍然沒有辦法。它仍然在我的本地機器上運行,但不在登臺服務器上運行。我只能看到配置差異是Python版本 - 在我的本地機器上,我有2.7.10,服務器有2.7.3 – avryhof