Django - 从模板传递参数到视图不起作用

时间:2015-01-02 20:39:21

标签: python regex django

我试图弄脏django,我开始尝试制作自己的项目。我目前无法在不使用POST请求的情况下将参数从我的模板传递到我的视图。

继承我模板中的代码

#in main.html

<div>
    {{ event_results }}
    {{ friends }}
</div>

{% for user in results %}
    <div class="userblock">
        <p class="user">{{ user.username }}</p>
            <a href="/events/addFriend/{{user.username}}">
                <button class="navbuttons" id="addfriend">Add as friend</button>
            <a/>
    </div>
{% endfor %}

#in urls.py

from django.conf.urls import patterns, url
from events import views, eventview

url(r'^addFriend/(<requested_friend>[a-z]*)/', views.addFriend, name='addFriend'),
)

#in views.py

def addFriend(request, requested_friend):
    currentUser = User.objects.get(username=request.session['username'])
    try:
        list_of_friends = Friends.objects.get(username=currentUser)
    except (KeyError, Friends.DoesNotExist):
        return render(request, 'events/main.html', {'friends': requested_friend})
    else:
        return render(request, 'events/main.html', {'friends':list_of_friends})

所以,当我点击按钮&#34;添加朋友&#34;在main.html中,它转到url.py并使用参数将其映射到views.py中的函数addFriend,并从那里完成它的魔力。但是,它没有参与辩论。我知道我在urls.py中使用正则表达式做错了但是我不确定是什么。任何意见是极大的赞赏。谢谢!

2 个答案:

答案 0 :(得分:1)

当您将(<requested_friend>[a-z]*)更改为(?P<requested_friend>[0-9A-Za-z_\-]+)时,一切看起来都不错。

但请记住在模式中使用+而不是**也匹配一个空字符串(addFriend//匹配),但+字符串必须至少包含一个字符(addFriend//不匹配)

您可以在网址格式$ Here的末尾添加r'^addFriend/(?P<requested_friend>[0-9A-Za-z_\-]+)/$',您可以找到原因。

同时检查浏览器中的链接是否具有正确的值/events/addFriend/<user_name>/ {{ user.username }}可能有问题

答案 1 :(得分:0)

urls.py中有错误。在命名组模式中,您会错过?P前缀。请参阅doc for reference

而不是

url(r'^addFriend/(<requested_friend>[a-z]*)/', views.addFriend, name='addFriend'),

应该是:

url(r'^addFriend/(?P<requested_friend>[a-z]*)/', views.addFriend, name='addFriend'),