用户正在profile/userB/
查看其他用户的个人资料,然后点击添加好友按钮。
这会将包含两个用户的POST
表单提交到create
应用(friends
)中的friends/create/
视图,该视图处理数据,创建新{{1}对象并将其保存在数据库中。 Flash消息被设置为反馈,用户发现自己重新开始Friend
。
用户永远不会看到profile/userB/
。
这感觉非常明显,我经常使用CakePHP做到这一点,但我在Django中无法想象这一点。我试图将forms.py分开,并将表单周围的模板分开(例如,“添加朋友”模板可以包含在各个位置,包括表单和提交,如上所述)。我认为这是正确的方法吗?
由于
答案 0 :(得分:0)
听起来你甚至不需要表格,也不需要提交POST
。不要将您的网址定义为friend/create/
,而是使用以下内容:
url(r'^create-friendship/(?P<user_id>\d+)/$', 'create_friendship', name='create-friendship'),
然后您将Add Friend
定义为链接(但您应该将其设置为用户体验按钮),大致如下:
<a href="{% url 'app:create-friendship' userB.id %}?from={{ request.path|urlencode }}">Add friend</a>
请注意,我在链接末尾添加了GET
参数from
,这是您传递给view方法的当前网址。然后在您的创建视图中:
def create_friendship(user_id):
# logic to build your friendship relationship between user_id and request.user
if request.GET.get('from'):
return HttpResponseRedirect(request.GET.get('from'))
else:
# return to some other urls
没有&#34;内置&#34;在django中这样做的方法,但是一旦你更好地理解了框架,就应该变得明显。
ps:要在django模板中访问request
变量,您必须启用模板处理器,在设置中将以下内容添加到TEMPLATE_CONTEXT_PROCESSOR:
TEMPLATE_CONTEXT_PROCESSORS = (
# ...
'django.core.context_processors.request',
# ...
)