Как передать значение переменной javascript с одной страницы html на другую страницу html? - PullRequest
0 голосов
/ 27 мая 2020

Я создаю приложение для викторины, используя JavaScript и Django. Фактически весь лог c был сделан в JavaScript. Для приложения викторины у меня есть переменная оценки, значение которой отображается в указателе. html, как показано ниже:

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

Здесь оценка - это переменная JavaScript.

Еще мне нужно сохранить эту переменную оценки в моей БД. Так что мне нужно использовать ajax для публикации переменной оценки в моем файле views.py, где работает моя функция, чтобы отправить оценку вместе с именем пользователя в модели Django.

модели .py:

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

    def __str__(self):
        return self.username

Здесь я взял имя пользователя и переменную оценки. И имя пользователя - это внешний ключ.

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: Здесь я использовал форму отправить партитуру вместе с именем. Я скрыл имя пользователя, чтобы пользователь не мог его изменить.

<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, но попытался показать счет в том же индексе. html. Он отображается, но я хочу получить это значение в конце. html. Можно ли вывести балл index. html (сохранение балла в #result) в конец. 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' ;

конец. html :( сюда)

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

URL. 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. Как передать значение от одного к другому html с помощью ajax почтового запроса?

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Вот код, который я пробовал. Я создал форму в index. html. Взяла фиктивный ввод, пометила и выполнила с ним некоторую операцию и отправила переменную score в конец. html, а также сохранила ее в db. Поскольку я работал с 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>

конец. 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})

Здесь также есть функция входа в систему, так как я хотел отметить пользователя для оценки. Я не знаю, кто это понимает. Но я серьезно надеюсь, что это поможет

0 голосов
/ 27 мая 2020

Можете ли вы попробовать это?
В файле views.py, если используется метод GET, создайте экземпляр модели результата, например result = Result.objects.get (pk = pk), pk относится к первичному ключу для получить результат конкретного пользователя и передать некоторый уникальный идентифицированный метод ваших представлений, например pk. Затем используйте тег шаблона для отображения в конце. html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...