【问题标题】:How to render variable to template in Django app如何在 Django 应用程序中将变量呈现为模板
【发布时间】:2021-01-25 09:39:37
【问题描述】:

我正在开发 Django 应用程序。

我想从此views.py中将变量“q_word”渲染到模板中

class DbList(ListView):
    model = TestEu
    paginate_by = 10

    def get_queryset(self):
        q_word = self.request.GET.get('query')

        if q_word:
            sql = 'select * from test_eu'
            sql += " where eng_discription ~ '.*" + q_word +".*'" 
            object_list = TestEu.objects.raw(sql)
            return object_list

由于“get_queryset”函数应用“self”作为第一个参数

def get_queryset(self):

我不知道如何应用下面的代码来渲染。

return render(request, 'detail.html', {'q_word': q_word})

【问题讨论】:

    标签: django render


    【解决方案1】:

    这不会被 a q_word 传递给模板。但是,如果您需要访问权限,则可以使用:

    {{ <b>view.request.GET.</b>query }}

    或者你可以将它传递给上下文:

    class DbList(ListView):
        model = TestEu
        paginate_by = 10
    
        def get_context_data(self, *args, **kwargs):
            return super().get_context_data(
                *args,
                q_word=self.request.GET.get('query'),
                **kwargs
            )
    
        def get_queryset(self):
            q_word = self.request.GET.get('query')
    
            if q_word:
                sql = 'select * from test_eu'
                sql += " where eng_discription ~ '.*" + q_word +".*'" 
                object_list = TestEu.objects.raw(sql)
                return object_list

    请注意,您所做的查询对于SQL injection [wiki] 是易受攻击的。这是使用 Django ORM 更好的(许多)原​​因之一。

    【讨论】:

      猜你喜欢
      • 2012-12-11
      • 2017-11-08
      • 2021-07-16
      • 2021-08-17
      • 2019-06-25
      • 2021-09-24
      相关资源
      最近更新 更多