【问题标题】:Django render doesn`t give a viewDjango 渲染没有给出视图
【发布时间】:2013-05-01 07:46:42
【问题描述】:

按下“搜索”按钮后,我在 urls.py 中重定向到 ClassView 的 as_view() 方法 有一个 if 如:

def as_view():
   if request.method == 'POST':
       //sth
   elif request.GET.get('test1') or request.GET.get('test2'):
       //sth
   else:
       form = myForm()
   return render(request, 'template.html', {'form' : form, 'arg': self.arg})

有一种奇怪的情况:在我的家用电脑上它可以工作,但在其他任何电脑上都不能。 详细地说,我在服务器上有这个文件,我连接到服务器,打开服务器上配置的 virtualenv,然后让 runserver 0:port

当我在家用计算机上执行此操作时一切正常,但如果我从另一台计算机连接到 http://sererIP:port,请按执行方法 as_view() 的“搜索”按钮,它会出现“其他” " 在代码中,然后表单被初始化,但返回渲染并没有给我任何东西,只有白页。当我签入服务器输出时,我得到了

[07/May/2013 05:54:33] "POST / HTTP/1.1" 405 0

红色。

从笔记本电脑连接到服务器并设置 runserver 0:port 后,即使在这台笔记本电脑上,我也遇到了同样的问题。我尝试过从家用计算机进行连接测试,但我也得到了白页。

【问题讨论】:

  • 您不应覆盖as_view()。使用get()、post()、delete()这样的方法并且只在urls.py中使用as_view()

标签: django forms post render


【解决方案1】:

as_view() 基于类的视图不应该返回一个 http 响应,而是一个可调用的函数...... 如果你想为 GET 请求发送响应,请在视图类中添加 get 方法:

class MyView(View):
    def get(request):
        # return your http response here

如果你想稍微浏览一下 Django 的基于类的视图,这里是a nice documentation!

【讨论】:

    【解决方案2】:

    为什么不使用 Django FormView? This is the documentation.

    from django.views.generic.edit import FormView
    
    class MyFormView(FormView):
        form_class = myForm
        template_name = 'my_template.html'
        success_url = '/thanks/'
    
        def get_context_data(self, **kwargs):
            #This is you GET
            return super(MyFormView. self).get_context_data(**kwargs)
    
        def form_valid(self, form):
            #This is after the post, when the form is valid
            return super(MyFormView, self).form_valid(form)
    
        def form_invalid(self, form):
            #This is after the post, when the form is invalid
            return super(MyFormView, self).form_invalid(form)
    

    您可以使用get_succes_url() 方法重定向到某个地方。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-02
      • 2020-10-17
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 2013-12-06
      相关资源
      最近更新 更多