Я пытаюсь создать веб-приложение, которое помогает изучать языки. На индексной странице (домашней странице) я хочу показать 2 раздела: «Последний словарь» и «Случайный словарь».
Следовательно, я хочу отфильтровать список словаря Spani sh, используя два фильтра отдельно. Первый - это упорядочить их по дате добавления в базу данных, а второй - рандомизировать и нарисовать 20 случайных слов. Я обнаружил, что get_queryset () - это способ выполнить первую фильтрацию, и я нашел еще один способ рандомизации из stackoverflow. Но проблема в том, что get_queryset () возвращает результат в context_object_name, и я полагаю, что может существовать только одно context_object_name. Поэтому я не знаю, как получить список random_spanish_list и отобразить его.
Вот код для страницы индекса.
{% if latest_spanish_list %}
<div class="flexcontainer">
<div class="sectiontitle">Latest vocabulary
</div>
{% for spanish in latest_spanish_list %}
<div class="card">
<div class="cardinner" onclick="this.classList.toggle('flipped');">
<div class="cardfront">
<a href="{% url 'geniusdennis:detail' spanish.id %}">{{ spanish.word_esp }}</a>
<form action="/deleteword/{{spanish.id}}/" method="post">{% csrf_token %}
<input type="submit" value="Delete"/>
</form>
</div>
{% for english in spanish.english_set.all %}
<div class="cardback">
<p>{{ english.word_eng}}</p>
</div>
{% endfor %}
</div>
</div>
{% endfor %}
</div>
{% else %}
<p>No Spanish words are available.</p>
{% endif %}
{% if random_spanish_list %}
<div class="flexcontainer">
<div class="sectiontitle">Random vocabulary
</div>
{% for spanish in random_spanish_list %}
<div class="card">
<div class="cardinner" onclick="this.classList.toggle('flipped');">
<div class="cardfront">
<a href="{% url 'geniusdennis:detail' spanish.id %}">{{ spanish.word_esp }}</a>
<form action="/deleteword/{{spanish.id}}/" method="post">{% csrf_token %}
<input type="submit" value="Delete"/>
</form>
</div>
{% for english in spanish.english_set.all %}
<div class="cardback">
<p>{{ english.word_eng}}</p>
</div>
{% endfor %}
</div>
</div>
{% endfor %}
</div>
{% else %}
<p>No Spanish words are available.</p>
{% endif %}
А вот код для шаблона IndexView.
class IndexView(generic.ListView):
template_name = 'geniusdennis/index.html'
context_object_name = 'latest_spanish_list'
def get_queryset(self):
"""
Return the last 20 Spanish words (not including those set to be
published in the future).
"""
return Spanish.objects.filter(
pub_date__lte=timezone.now()
).order_by('-pub_date')[:20]
def get_queryset(self):
# grab the max id in the database
max_id = Spanish.objects.order_by('-id')[0].id
random_id = random.randint(1, max_id + 1)
Spanish.objects.filter(id__gte=random_id)[0]
return random_spanish