正则表达式测试程序通过时NoReverseMatch

2024-06-07 21:00:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在浏览器中访问以下url:http://localhost:8000/hourregistration/reminder/2016WK24/

我想弄明白为什么它会失败:

NoReverseMatch at /hourregistration/reminder/2016WK24/

Reverse for 'mailreminder' with arguments '('24',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['hourregistration/reminder/(?P<yearwknr>[0-9]{4}WK[0-9]{2})/$']

Error during template rendering

In template C:\Users\USER\Documents\Visual Studio 2015\Projects\PP\PP\hourregistration\templates\hourregistration\slacker-table-and-form.html, error at line 99

我的urls.py

app_name = 'hourregistration'
...
url(r'^reminder/(?P<yearwknr>[0-9]{4}WK[0-9]{2})/$', views.mailreminder, name='mailreminder'),

为了它的价值views.py

def mailreminder(request, yearwknr):
    year = yearwknr[:4]
    wknr = yearwknr[6:]
    if request.method == "GET":
        slackers = db.getSlackers(year, wknr)
        context = {'slackers':slackers, 
                   'yearwknr': wknr}
        return render(request, 'hourregistration/slacker-table-and-form.html', context)
    [omitted the POST path as it's not relevant]

部分模板在slacker-table-and-form.html上失败。都在一个$(document).ready()

    $('input#submit-form').click(function () {
        if ($('input#receiverList').val().length == 0) {
            $('#mail-warning').text('No recipients!');
        } else {

            $.ajax({
line 99 -->     url: "{% url 'hourregistration:mailreminder' yearwknr %}",
                type: "post",
                dataType: "html",
                data: {'csrfmiddlewaretoken': csrftoken, 'to': $('input#receiverList').val(), 'subject': $('input#subject').val(), 'body': $('form-body').val()},
                success: function (data) {
                            $('#mail-warning').text('success!');
                        },
            });
        }
    });

reverse()从Django控制台工作:

reverse('hourregistration:mailreminder',kwargs={'yearwknr':'2016WK24'})
'/hourregistration/reminder/2016WK24/'

使用http://pythex.org/我的正则表达式似乎也能像预期的那样进行验证。然而,不知何故,Django似乎只抓住了regex的最后一点。作为一个简单的测试,我将url替换为:

url(r'^reminder/(?P<yearwknr>.+)/$', views.mailreminder, name='mailreminder'),

然后就成功了。所以我至少可以肯定我是在和正确的url()斗争(在这个过程中只有1个额外的)网址.py无论如何,这是毫无争议的)。你知道吗

为什么我的正则表达式在浏览器中不匹配,而在Django控制台或外部正则表达式测试仪中却匹配?你知道吗


Tags: andnamepyformurlinputhtmltable
1条回答
网友
1楼 · 发布于 2024-06-07 21:00:06

发现了问题。我在我的上下文(视图中)中传递wknr,而不是'yearwknr'

    context = {'slackers':slackers, 
               'yearwknr': wknr}

现在

    context = {'slackers':slackers, 
               'yearwknr': yearwknr}

现在也很清楚为什么我只得到关键字参数的wknr部分。你知道吗

相关问题 更多 >

    热门问题