繁体   English   中英

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

[英]Django - Passing parameters from template to view not working

我试图弄清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})

因此,当我单击main.html中的“添加朋友”按钮时,它将转到url.py并将其映射到views.py中带有参数的addFriend函数,并从那里开始发挥作用。 但是,它并没有考虑参数。 我知道我用正则表达式在urls.py中做错了,但我不确定是什么。 任何意见是极大的赞赏。 谢谢!

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

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

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

另外,请检查浏览器中的链接的值是否正确/events/addFriend/<user_name>/可能与{{ user.username }}

您在urls.py中出错。 在命名组模式中,您会错过?P前缀。 请参阅doc以获取参考

代替

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

它应该是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM