Python Django视图和URl';s
我的URL在Django中的外观有问题。我有这样的看法:Python Django视图和URl';s,python,django,Python,Django,我的URL在Django中的外观有问题。我有这样的看法: def updatetext(request, fb_id): Account.objects.filter(id=fb_id).update(display_hashtag=request.POST['hashtag']) fb = get_object_or_404(Account, pk=fb_id) return render(request, 'myapp/account.html', {
def updatetext(request, fb_id):
Account.objects.filter(id=fb_id).update(display_hashtag=request.POST['hashtag'])
fb = get_object_or_404(Account, pk=fb_id)
return render(request, 'myapp/account.html', {
'success_message': "Success: Settings updated.",
'user': fb
})
from django.conf.urls import patterns, url
from myapp import views
urlpatterns = patterns('',
url(r'^home/$', views.index, name='index'),
url(r'^(?P<fb_id>\d+)/$', views.account, name='account'),
url(r'^(?P<fb_id>\d+)/updatetext/$', views.updatetext, name='updatetext'),
url(r'^(?P<fb_id>\d+)/updatepages/$', views.updatepages, name='updatepages'),
url(r'^login/$', views.user_login, name='login'),
url(r'^logout/$', views.user_logout, name='logout'),
url(r'^admin/$', views.useradmin, name='admin'),
)
当用户单击URL更新文本时,他们会被重定向到帐户页面,但URL看起来像“account/updatetext/”。我希望它只是“帐户/”
在Django我该怎么做。我将使用什么来代替呈现,它仍然允许我将请求、“success_message”和“user”传递到返回的页面中,但不在URL中包含“updatetext”
[编辑]
url.py文件如下所示:
def updatetext(request, fb_id):
Account.objects.filter(id=fb_id).update(display_hashtag=request.POST['hashtag'])
fb = get_object_or_404(Account, pk=fb_id)
return render(request, 'myapp/account.html', {
'success_message': "Success: Settings updated.",
'user': fb
})
from django.conf.urls import patterns, url
from myapp import views
urlpatterns = patterns('',
url(r'^home/$', views.index, name='index'),
url(r'^(?P<fb_id>\d+)/$', views.account, name='account'),
url(r'^(?P<fb_id>\d+)/updatetext/$', views.updatetext, name='updatetext'),
url(r'^(?P<fb_id>\d+)/updatepages/$', views.updatepages, name='updatepages'),
url(r'^login/$', views.user_login, name='login'),
url(r'^logout/$', views.user_logout, name='logout'),
url(r'^admin/$', views.useradmin, name='admin'),
)
来自django.conf.url导入模式,url
从myapp导入视图
urlpatterns=模式(“”,
url(r“^home/$”,views.index,name='index'),
url(r'^(?P\d+/$),views.account,name='account'),
url(r'^(?P\d+)/updatetext/$,views.updatetext,name='updatetext'),
url(r'^(?P\d+)/updatepages/$',views.updatepages,name='updatepages'),
url(r“^login/$”,views.user\u login,name='login'),
url(r“^logout/$”,views.user\u logout,name='logout'),
url(r“^admin/$”,views.useradmin,name='admin'),
)
您需要实际将用户重定向到“/account/”。您可以执行以下操作,而不是返回对render
的调用:
from django.http import HttpResponseRedirect
def updatetext(request, fb_id):
Account.objects.filter(id=fb_id).update(display_hashtag=request.POST['hashtag'])
fb = get_object_or_404(Account, pk=fb_id)
return HttpResponseRedirect(reverse('account', kwargs={"fb_id": fb_id}))
但是,最好将对
reverse
的调用传递到HttpResponseRedirect
构造函数中,但是因为我不知道你的url.py,所以我只编写了相对的url。你的url.py
看起来像什么?帐户/页面的url看起来像这样的“url(r'^(?p\d+/$”,views.account,name='account)“如何使用HttpResponseRedirect将‘success_message’和‘user’传递到页面?我更新了答案,将fb_id传递到反向调用中,该调用将生成正确的url。您需要通过请求传递成功消息。会话
,或者您可以使用django的消息框架:。我想最后一种处理方法是将其作为URL中的查询参数传递给视图。@user2547755还有一件事,在收到POST
请求后始终重定向用户。这可以防止用户在重新加载页面时发送两次请求(主要是意外),并在数据最初正确保存时防止重复数据或感知错误。谢谢@schillingt。你已经为我澄清了这件事。