Django Шаблон request.GET.value не работает
Мне нужно установить selected="selected" для поля select.
<form action="{% url 'books:book_detail' book.pk %}" method="get">
{% csrf_token %}
<select name="country">
{% for shop_country in shop_countries_list %}
{% if request.GET.country == shop_country.pk %}
<option value="{{ shop_country.pk }}" selected="selected">{{ shop_country.name }}</option>
{% else %}
<option value="{{ shop_country.pk }}">{{ shop_country.name }}</option>
{% endif %}
{% endfor %}
</select>
<button class="button" type="submit">Search</button>
</form>
Но это не работает. Я думаю, что request.GET.country внутри оператора if является null или пустым. Но если я помещу request.GET.country в другое место моего кода, например, так: {{ request.GET.country }} - это даст правильное значение.
Вопрос в том, почему он не дает никакого значения внутри оператора if?
Views.py
class BookDetailView(DetailView):
model = Book
template_name = 'book-detail.html'
def get_context_data(self, **kwargs):
book = Book.objects.get(pk = self.kwargs['pk'])
category = Category.objects.get(name = book.category.first())
# Call the base implementation first to get a context
context = super().get_context_data(**kwargs)
# Add in a QuerySet
context['book_text'] = BookText.objects.get(book = book)
context['book_info'] = BookInfo.objects.get(book = book)
book_info = BookInfo.objects.get(book = book)
if book_info.pages:
hours = round((book_info.pages / 60), 1)
else:
hours = None
context['hours'] = hours
context['category_books'] = Book.objects.filter(category = category).order_by('bookinfo__bestseller')[:12]
context['shops_list'] = Shop.objects.filter(country = self.request.GET.get('country'))
context['shop_countries_list'] = ShopCountry.objects.all()
return context
Модели
Вы пробовали это?
<form action="{% url 'books:book_detail' book.pk %}" method="get">
{% csrf_token %}
<select name="country">
{% for shop_country in shop_countries_list %}
{% if request.country == shop_country.pk %}
<option value="{{ shop_country.pk }}" selected="selected">{{ shop_country.name }}</option>
{% else %}
<option value="{{ shop_country.pk }}">{{ shop_country.name }}</option>
{% endif %}
{% endfor %}
</select>
<button class="button" type="submit">Search</button>
</form>
if country is object try request.country.pk