Перезагрузите страницу без обновления с django и ajax - PullRequest
0 голосов
/ 21 января 2020

Я занимаюсь разработкой сайта, который использует Django для проверки цен на криптовалюту. Я хочу загрузить значение, хранящееся в файле базы данных django sqlite3 без обновления (F5), используя ajax. Что мне делать?

(Однако, если пользователь обновит страницу вручную, значение изменится. Это происходит из-за того, что значение загружено из базы данных.)

Цены на криптовалюту и другую информацию автоматически собираются сканером и сохраняются в реальном времени в db.sqlite3 в вашем Django проекте.

index. html (этот шаблон HTML является stati c его значение не изменяется в реальном времени.)

{% extends 'exchange/layout.html' %}
{% load humanize %}
{% block title %}XCoin{% endblock %}
{% block body %}
<table class="table table-condensed">
 <thead>
   <tr>
      <th>#</th>
      <th>Name</th>
      <th>Price</th>
      <th>Market Cap</th>
      <th>Volume (24h)</th>
      <th>Circulating Supply</th>
   </tr>
 </thead>
 <tbody>
   {% for coin in coins %}
   <tr>
      <td>{{coin.ranking}}</td>
      <td>[ {{coin.abbreviation}} ]  {{coin.name}}</td>
      <td>{{coin.price|intcomma}}$</td>
      <td>{{coin.marketcap|intcomma}}$</td>
      <td>{{coin.volume|intcomma}}$</td>
      <td>{{coin.circulatingsupply|intcomma}} {{coin.abbreviation}}</td>
   </tr>
   {% endfor %}
 </tbody> 

</table>
{% endblock %}

urls.py

from django.contrib import admin
from django.urls import path
from . import views

app_name = 'exchange'
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index, name='home'),
]

models.py

from django.db import models

class Coin(models.Model):
    ranking = models.IntegerField() # coin ranking
    abbreviation = models.CharField(max_length=10) # coin symbol
    name = models.CharField(max_length=20) # coin name
    price = models.FloatField() # coin price ($)
    marketcap = models.IntegerField() # coin marketcap ($)
    volume = models.IntegerField() # coin volume (24h)
    circulatingsupply = models.IntegerField() # coin supply

    def __str__(self):
        return self.name

views.py

from .models import Coin
from django.shortcuts import render
from django.shortcuts import HttpResponse

def index(request):
    coin = Coin.objects.all()
    context = {'coins':coin}
    return render(request, 'exchange/index.html', context)

Ответы [ 2 ]

1 голос
/ 21 января 2020

Что бы я сделал, это создал бы API, который принес бы мне значение (Dynami c). затем с помощью реакции / angular или того, что вам больше подходит, создайте событие, которое покажет вам значение на экране (тоже динамически), но не отобразит это значение из представленного контекста, отрендерите его из того же JS.

Кстати, я бы рекомендовал использовать CBV вместо FBV.

0 голосов
/ 22 января 2020

самое простое решение - создать представление, содержащее данные, и представление, действующее как фрейм. Установите таймер в представлении кадра и затем используйте jQuery .load () (https://api.jquery.com/load/)

. Пример будет:

var l_url = '/path/to/data_view'
var l_html = $('div#test-load');
l_html.load(l_url,function(data,status,jqXGR){
   //add some additional processing here if you want to process the returned data
   //if your data_view is designed correclty you shouldn't need it
}

, используя api и получение данных из базы данных (как предложено в постах выше), тем не менее, лучший вариант.

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