2015-09-21 3 views
0

Я ищу простой пример того, как отображать текущее время на странице в проекте django. Я попытался поиск и придумал следующее (который не обновляется, если я обновить страницу):Использование Ajax в Django для отображения времени суток каждую секунду

Вот мой urls.py:

from django.conf.urls import patterns, include, url 
from garageMonitor.views import * 
from django.contrib import admin 

admin.autodiscover() 

urlpatterns = patterns('', 
    url('time', time, name="time"), 
) 

Вот мой views.py:

def time(request): 
    now = strftime("%H:%M:%S", gmtime()) 

    time_dict = {"Time":now} 
    return render_to_response('time.html', {'time': time_dict}) 

Вот time.html:

<script type="text/javascript" 
src="/static/garageMonitor/scripts/refreshTime.js"> 
window.onload = refreshTime; 
</script> 
<table id="test"><tbody> 
<tr> 
{% include "testing.html" %} 
</tr> 
</tbody></table> 

Вот testing.html:

{% for label, value in temperature.items %} 
     <td >{{ label }}</td> 
     <td>{{ value }}</td> 
{% endfor %} 

Вот мой refreshTime.js:

function refresh() { 
    $.ajax({ 
     url: '{% url monitor-test %}', 
     success: function(data) { 
      $('#test').html(data); 
     } 
     setInterval("refreshTime()", 1000); 
    }); 
} 

$(function(){ 
    refresh(); 
}); 

Я бы признателен за любую помощь, пожалуйста.

Я посмотрел код в консоли. Он жалуется на линии:

$(function(){ 

(это не нравится "$")

+0

Где функция refreshTime? – trpt4him

+0

Хороший улов trpt4him. Я изменил код на выше, но он все еще не работает. – jordanthompson

+0

Ajax кажется overkill здесь. Почему бы не выводить время непосредственно в Javascript, не оставляя сервер полностью? –

ответ

1

EDIT:

Кроме того, необходимо JQuery. Добавьте <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script> перед другим блоком скрипта в html.

См документации по SetTimeout и setInterval: http://www.w3schools.com/jsref/met_win_settimeout.asp http://www.w3schools.com/jsref/met_win_setinterval.asp

Измените Javascript для этого:

function refresh() { 
    $.ajax({ 
     url: '{% url monitor-test %}', 
     success: function(data) { 
      $('#test').html(data); 
     } 
    }); 
} 

$(function(){ 
    setInterval(refresh, 1000); 
}); 

или, возможно, это было бы лучше:

function refresh() { 
    $.ajax({ 
     url: '{% url monitor-test %}', 
     success: function(data) { 
      $('#test').html(data); 
      setTimeout(refresh, 1000); 
     } 
    }); 
} 

$(function(){ 
    refresh(); 
}); 
+0

Хороший улов (но все еще не работает). Я изменил javascript на код выше. – jordanthompson

+0

@jordanthompson вы удалили ваш кеш браузера? Также, вы получаете ошибки в консоли? – user1132959

+0

Я очистил кеш браузера (без разницы), и ошибка, которую я получаю, равна «Неоткрытый ReferenceError: $ не определен: ) \t @ \t refreshTime. JS: 11" функция RefreshTime() { $ .ajax ({ URL: '{% времени URL%}', успех:. функция (данные) { $ ('# тест') HTML (данные) setTimeout (refreshTime, 1000); } }); } Оскорбительная линия >>>>> $ (function() {<<<< Оскорбительная строка refreshTime(); }); – jordanthompson

0

Я использую это , является стандартным тегом в django.

<ul class="sidebar-stats"> 
     <li class="margin left right"> 
      <h5>{% now "j F Y H:i" %}</h5> 
     </li> 
    </ul> 
+0

спасибо за тег по умолчанию, Paulo, но моя цель - обновить другие элементы на моей странице позже (время - просто «простой» пример.) – jordanthompson

0

пользователь1132959 был место сверху! Мне нужно было добавить:

<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script> 

У меня были проблемы с количеством раз за цикл, который обновлялась. Я думаю, что это возможно из-за кеша, но я не уверен. Вот что у меня сейчас, похоже, работает.

refreshTime.js:

function refreshTime() { 
    $.ajax({ 
    url: '{% url time %}', 
    success: function (data) { 
     console.log("success function called"); 
     $('#test').html(data); 
    } 
    }); 
} 


$(document).ready(function() { 
    console.log("setting interval"); 
     setTimeout(refreshTime,1000); 
}); 

time.html:

<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script> 
<script type="text/javascript" src="/static/garageMonitor/scripts/refreshTime.js"></script> 

<table id="test"> 
    <tbody> 
    <tr> 
     {% include "testing.html" %} 
    </tr> 
    </tbody> 
</table> 

URLs.ру:

from django.conf.urls import patterns, include, url 

urlpatterns = patterns('', 
    url('time', time, name="time"), 
) 

views.py:

def time(request): 
    now = strftime("%H:%M:%S", gmtime()) 

    time_dict = {"Time":now} 
    return render_to_response('time.html', {'time': time_dict}) 

Я действительно надеюсь, что это помогает кто-то добраться до конца их радуги быстрее, чем я.

спасибо всем, кто мне помог!

+0

Я говорил слишком рано. Он обновляется, но он обновляется примерно 15 раз/секунду! У меня установлено время 5000 (должно быть 5 секунд ...) – jordanthompson

+0

Похож на этого (число обновлений удваивается каждый раз, когда он вызывается.) – jordanthompson

+0

Я думал, что у меня это лизало, но оно ведет себя странно. Если я оставлю вызов функции выглядеть так: $ (document) .ready (function () { Кажется, увеличивается количество раз, когда вызывается refreshTime(). Когда я ставлю его $ (document) .load (function() { и обновляю страницу, он отлично работает (называется каждую секунду) до тех пор, пока I refre sh снова, затем он перестает обновляться. – jordanthompson

Смежные вопросы