Django 1.8:NoReverseMatch错误

时间:2016-04-26 15:15:03

标签: python django

首先,此代码适用于我的本地测试环境,但无法在我们的暂存环境中运行。

我得到的错误是 -

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)

我尝试在调试时使用* args和** kwargs传递成员ID哈希。这似乎应该是简单的......我错过了什么?

以下是cutom模板标签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)

2 个答案:

答案 0 :(得分:0)

你应该用反斜杠

来转义连字符
[A-Za-z0-9=\-_]

或者你可以把它移到小组的末尾

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

目前,=-_被视为从=_的范围,实际上并不包含-

答案 1 :(得分:0)

它忽略了我的功能,因为我使用的是Reportlab,并且没有在Staging服务器上安装Reportlab。一旦我说出来,它就有用了。