【问题标题】:Unable to print the variable passed from view to template无法打印从视图传递到模板的变量
【发布时间】:2019-03-16 03:45:11
【问题描述】:

我正在尝试传递变量,我正在从视图中获取模板,但它显示在网络浏览器(chrome)的预览中,但未显示在实际屏幕上。 以下是我的视图文件:

analyzer=SentimentIntensityAnalyzer() 
data={}
with open('today_5th_oct_new.csv','r',newline='', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
     data[row[0]]=float(row[1])

analyzer.lexicon.update(data)

def index(request):
   return render(request, "gui/index.html")
@csrf_exempt

def output(request):
    sentences = request.POST.get('name',None)
    senti = analyzer.polarity_scores(sentences)
    context_dict = {'sentiment': senti}
    return render(request,"gui/index.html", context = context_dict)

以下是我的模板-

<!doctype html>
<html>
<head><script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script></head>
    <body>
            <form action>
                Enter Sentence:<input id = "name" type = "text" name = "EnterSentence" encoding = "utf-8"><br>
                <input onclick = "testfunction()" type = "button" value = "Submit" >
            </form>
            <div><strong>Score is {{ sentiment }}</strong></div>
</body>
<script>
var testfunction = () => {
var test = document.getElementById("name").value
console.log(test)

 $.ajax({
         type: "POST",
         dataType: "json",
         url: 'output/',
         data:{
                csrfmiddlewaretoken: '{{ csrf_token }}',
               'name': test
                },
                success: function(response) {
                console.log("Succesful return firm ajax call");
                },
                error: function(result){
                console.log("Failure");
                }
         });

}
</script>

我在预览中观察到所需的输出,而不是在实际页面上。 如何解决?

【问题讨论】:

  • context 应该返回索引函数本身,然后只在 ajax 调用的模板中可用,你应该返回 HttpResponse 作为 JSON 然后你可以从 ajax 成功函数访问它
  • 能否详细说明方法

标签: django html django-templates django-views


【解决方案1】:

您通过 Ajax 获得响应,但您没有对它做任何事情。您的success 函数需要以某种方式将内容插入到页面中。

老实说,我完全不明白你为什么在这里使用 Ajax。如果您删除了 JS 代码并让您的表单直接执行 POST 就可以正常工作。

【讨论】:

  • 但是当我通过 context_dict 的视图传递它时它不会被插入
  • 插在哪里?正如您在 Chrome 工具中看到的那样,您的视图函数将其返回给 Ajax,但您的 Ajax 脚本不对其执行任何操作,因此不会显示。
  • 您似乎对 Ajax 感到困惑,这就是为什么我说您不应该使用它的原因。完全删除 JS 并将您的表单标签更改为&lt;form action='.' method='POST'&gt;
  • 好的,我是 web 开发和 ajax 的新手,所以为我的无知道歉,但是在删除 ajax 之后,如何将输入传递给我的视图以进行进一步处理。
  • 我不明白这个问题。这就是表单正在做的事情。
猜你喜欢
  • 2015-05-23
  • 2016-11-06
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
相关资源
最近更新 更多