Mic*_*unn 13 django django-class-based-views
在Django中为"基于类"的通用视图添加"取消"按钮的最佳方法是什么?
在下面的示例中,我希望取消按钮将您带到success_url不删除对象.我试过<input type="submit" name="cancel" value="Cancel" />在模板上添加一个按钮.我可以通过覆盖类的post方法来检测是否按下了这个按钮AuthorDelete,但我无法弄清楚如何从那里重定向.
示例myapp/views.py:
from django.views.generic.edit import DeleteView
from django.core.urlresolvers import reverse_lazy
from myapp.models import Author
class AuthorDelete(DeleteView):
model = Author
success_url = reverse_lazy('author-list')
def post(self, request, *args, **kwargs):
if request.POST["cancel"]:
return ### return what? Can I redirect from here?
else:
return super(AuthorDelete, self).post(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
示例myapp/author_confirm_delete.html:
<form action="" method="post">{% csrf_token %}
<p>Are you sure you want to delete "{{ object }}"?</p>
<input type="submit" value="Confirm" />
<input type="submit" name="cancel" value="Cancel" />
</form>
Run Code Online (Sandbox Code Playgroud)
(从文档改编的例子)
Ala*_*air 14
您重写post方法并检查是否按下取消按钮的方法是可以的.您可以通过返回HttpResponseRedirect实例来重定向.
from django.http import HttpResponseRedirect
class AuthorDelete(DeleteView):
model = Author
success_url = reverse_lazy('author-list')
def post(self, request, *args, **kwargs):
if "cancel" in request.POST:
url = self.get_success_url()
return HttpResponseRedirect(url)
else:
return super(AuthorDelete, self).post(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
我曾经get_success_url()是通用的,它的默认实现是返回self.success_url.
Ber*_*pac 12
为什么不简单地将"取消"链接添加到success_url按钮而不是按钮?您始终可以使用CSS设置样式,使其看起来像一个按钮.
这样做的好处是不使用POST表单进行简单的重定向,这可能会混淆搜索引擎并破坏Web模型.此外,您不需要修改Python代码.
如果使用CBV,则可以view直接从模板访问
<a href="{{ view.get_success_url }}" class="btn btn-default">Cancel</a>
Run Code Online (Sandbox Code Playgroud)
注意:如果已将其子类化,则应通过getter访问它。
这在ContextMixin文档中有所说明
所有基于类的通用视图的模板上下文都包含一个
view指向View实例的变量。
| 归档时间: |
|
| 查看次数: |
8947 次 |
| 最近记录: |