Минимальный пример для динамических HTML-страниц с Django и AJAX - PullRequest
0 голосов
/ 19 октября 2018

Я ссылаюсь на следующие сообщения:

Несмотря на два поста и хорошие ответы, я все еще пытаюсь создать минимальный рабочий пример для динамических HTML-страниц, использующих Django иAJAX.

Мне нужен следующий код:

models.py

from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

urls.py

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^get_more_tables', views.get_more_tables, name='get_more_tables')
]

views.py

from django.shortcuts import render
from .models import Question

def index(request):
    a = Question.objects.order_by('-pub_date')
    context = {'questions': a}
    return render(request, 'polls/index.html', context)

def get_more_tables(request):
    a = Question.objects.order_by('-pub_date')
    context = {'questions': a}
    return render(request, 'polls/get_more_tables.html', context)

index.html

<html>
<body>

<table id="_appendHere">
<tr><td> text </td></tr>

{% for a in questions %}
<tr><td>    {{ a.question_text }} </td></tr>
{% endfor %}

</table>
</body>
</html>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
var append_increment = 0;
setInterval(function() {
    $.ajax({
        type: "GET",
        url: "{% url 'get_more_tables' %}",
        data: {'append_increment': append_increment}
    })
    .done(function(response) {
        $('#_appendHere').append(response);
        append_increment += 10;
    });
}, 1000)

get_more_tables.html

{% for a in questions %}
<tr><td>    {{ a.question_text }} </td></tr>
{% endfor %}

У меня есть следующие проблемы:

  • В соответствии с Ошибка консоли с Ajax: ReferenceError: $ не определено Мне нужно настроить js.file в js-скрипте.Если я этого не сделаю, я получаю ошибку «ReferenceError: $ is notfined».Почему, в частности, это не нужно для предыдущих постов, упомянутых выше?
  • Если я запускаю http://localhost:8000/polls/,, ничего не происходит.Я предполагал, что, когда я использую

    q2 = Вопрос (question_text = "Что случилось4?", Pub_date = timezone.now ()) q2.save ()

с помощью оболочки python manage.py, должна отображаться вся внутренняя база данных.Однако ничего не происходит.Когда я обновляю сайт вручную, отображаются все записи.

  • Консоль инспектора Mozilla не показывает никаких записей.Сетевая консоль Mozilla показывает, что / pool и внешний файл js доступны.Однако непрерывный доступ с интервалом в 1 с не отображается (не уверен, что так и должно быть).

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Ваш HTML недопустим по нескольким причинам.

Сначала вы помещаете блок скрипта за закрывающий тег </html>.Это означает, что он находится за пределами самого документа и может не читаться браузером.

Что еще более важно, у вас нет своего кода внутри соответствующего элемента скрипта.У вас есть открывающий тег, но вы используете его для ссылки на внешнюю библиотеку jQuery через атрибут src.У вас вообще нет закрывающего тега

Вам нужно поместить ссылку на jQuery в его собственный элемент и использовать надлежащие открывающие и закрывающие теги для собственного сценария.

<html>
<body>
<table>
...
</table>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
var append_increment = 0;
setInterval(function() {
    $.ajax({
        type: "GET",
        url: "{% url 'get_more_tables' %}",
        data: {'append_increment': append_increment}
    })
    .done(function(response) {
        $('#_appendHere').append(response);
        append_increment += 10;
    });
}, 1000)
</script>
</body>
</html>
0 голосов
/ 19 октября 2018

Вы должны экспортировать свой JQuery в другой файл (без каких-либо тегов, только JQuery).И добавьте готовую функцию:

$(document).ready(function(){
    // Your JS code here
}); 

В html сделайте следующее:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
<script src="<relative_path_to_your_js>">

Маршрут / опросы / не существует.Так что ничего не происходит.У вас определены только маршруты / и /get_more_tables.

Я не понял последнего вопроса, что вы вводите в Interactive Console?(После ввода ./manage.py shell)

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