【问题标题】:How to pass the javascript variable value from one html page to the another html page?如何将 javascript 变量值从一个 html 页面传递到另一个 html 页面?
【发布时间】:2020-05-30 00:15:24
【问题描述】:

我正在使用 JavaScript 和 Django 创建测验应用程序。实际上整个逻辑都是在 JavaScript 中完成的。对于测验应用程序,我有一个分数变量,我在 index.html 中显示分数变量值,如下所示:

          resultCont.innerHTML = 'Your Score:- ' + score + '/80' ;

这里的 score 是 JavaScript 变量。

我需要将此分数变量存储到我的 DB 中。所以我需要使用 ajax 将 score 变量发布到我的 views.py 文件中,我的函数正在运行该文件,以便将分数和用户名一起提交给 Django 模型。

models.py:

class Results(models.Model):
    username = models.CharField(max_length=50,default='')
    score = models.IntegerField()

    def __str__(self):
        return self.username

这里我使用了 username 和 score 变量。而用户名就是外键。

views.py

def score(request):
    if request.method == 'GET':
        return render(request, 'quiz/html/end.html',{'form':Score()})
    else:
        try:
            form = Score(data=request.POST)
            newscore = form.save(commit=False)
            newscore.owner = request.user
            newscore.save()
            return redirect('category')
        except ValueError:
            return render(request, 'quiz/html/end.html',{'form':Score(), 'error' :'please fill the form properly'})

end.html: 这里我使用了表单来提交分数以及 name 。我隐藏了用户名,以便用户无法更改名称。

<form method="POST">
        {% csrf_token %}

        <div>
            <p style="display:none;">
                <label for="id_username">Username:</label>
                <input type="text" name="username" value={{user.username}} placeholder="{{user.username}}" maxlength="50" required="" id="id_username">
            </p>

            <p>
                <label for="id_score">Score:</label>
                <input type="number" name="score" placeholder ='' value='I want the score value here from javascsript' required="" id="id_score">         
            </p>
        </div>
        <button type="submit">Submit</button>

    </form>

我编写了 ajax 发布请求,但我尝试在同一个 index.html 中显示分数。它正在显示,但我想要 end.html 中的分数值。是否可以将index.html的分数(分数存储在#result中)显示到end.html(分数需要存储的地方)

function scoresubmit(){
          $.ajax({
            url: '/',
            method : 'POST',
            // data: {score: $('#score').val(), "csrfmiddlewaretoken" : "{{csrf_token}}"},
            success: function() {
              $('#name').html(score);
            }
             });
            }

index.html:(从这里)

resultCont.innerHTML = 'Your Score:- ' + score + '/80' ;

end.html:(到这里)

 <input type="number" name="score" placeholder ='' value='I want the score value here from javascsript' required="" id="id_score">         

urls.py:

path('home', views.home,name = "home"),
    path('main',views.main, name='main'),
    path('', views.score, name = "score"),
    path('profile/',views.profile, name = "profile"),
    path('category/',views.category, name = "category"),

我唯一想要的是将分数与用户名一起存储在我的数据库 (Django) 中。

我的 ajax 代码有什么问题。如何使用 ajax 发布请求将值从一个传递到另一个 html?

【问题讨论】:

  • 您在视图中使用的 Score() 是另一个模型吗?
  • @ms394 No class Score(ModelForm): class Meta(): model = Results fields = ['username','quizname','score'] 我这里只用了forms.py文件
  • @ms394 你能告诉我如何将 Javascript 值传递给 djangi 模型吗?
  • @ms394 是存储数据的正确过程。如果你知道的话,请直接说出方式:-(伙计,我现在非常想要这个过程。只是方式或任何链接
  • 如果数据保存在数据库中,您是否在管理员中验证过?

标签: javascript python html django ajax


【解决方案1】:

嘿,下面是我尝试过的代码。 我在 index.html 中创建了一个表单。获取虚拟输入,标记并对其执行一些操作并将变量分数发送到 end.html 并将其存储在数据库中。 由于我使用的是 JS ajax,因此我使用了 djano-rest 框架。 下面是代码

models.py

from django.db import models
from django.contrib.auth.models import User


# Create your models here.
class Results(models.Model):
    user = models.ForeignKey(User, default=None, on_delete=models.CASCADE)
    score = models.IntegerField()
    marks = models.IntegerField()

index.html

body>
    <form id="scoreform" method="POST">
        {% csrf_token %}
        <p class="marks">
            <label for="marks">Marks</label>
            <input type="number" name='marks' id="id_marks">
        </p>

        <input type="submit"  id="submit" value="Submit">
    </form>
</body>

<script src="{% static 'main.js' %}"></script>

end.html

<body>
    <form id="scoreform" method="POST">
        {% csrf_token %}
        <p class="username">
            <label for="username">Label</label>
            <input type="text" name="username" value={{score.user}}>
        </p>
        <p class="scores">
            <label for="score">Score</label>
            <input type="number" name='score' id="score-value" value={{score.score}}>
        </p>

    </form>
</body>

views.py

from django.shortcuts import render, redirect
from .models import Results
from .forms import Score
from django.contrib.auth.decorators import login_required
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .serializers import ResultSerializer

# Create your views here.
@api_view(['GET','POST'])
@login_required(login_url='users:login')
def score(request):
    form = Score()
    print(1)
    if request.method == 'POST':
        serializer = ResultSerializer(data=request.data)
        print(serializer)
        if (serializer.is_valid()):
            print(3)
            serializer.save(user = request.user)
            return Response(request.user.pk)
    return render(request, 'index.html', {'form': form})
    #return redirect('score:end', pk=request.user.pk)   

@login_required(login_url='users:login')
def end(request, pk):
    score = Results.objects.get(pk=pk)
    return render(request, 'end.html', {'score':score})

这也有登录功能,因为我想将用户标记到分数。 我不知道谁清楚这会适合你。但我真的希望这会有所帮助

【讨论】:

    【解决方案2】:

    你可以试试这个
    在views.py文件中,如果方法是GET,则创建一个Result Model的实例,如result = Result.objects.get(pk = pk),pk指的是要获取的主键 特定用户的结果,并将某些唯一标识传递给您的视图方法,例如 pk。 然后在end.html中使用模板标签显示

    【讨论】:

    • 我在 javascript 中有一个分数值,现在我希望该值与用户名一起存储在数据库中,如何获取它。请解释一下。给我示例代码@ms394
    • 我只是从一周开始尝试它甚至不存储请帮助我@ms394 如果项目存储在数据库中,我需要提交:-(
    猜你喜欢
    • 2011-04-15
    • 2017-09-19
    • 1970-01-01
    • 2011-11-08
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多