【问题标题】:Django Template request.GET.value don't workDjango 模板 request.GET.value 不起作用
【发布时间】:2022-06-10 17:21:08
【问题描述】:

我需要为选择字段设置 selected="selected"。

<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>

但它不起作用。我认为 if 语句中的 request.GET.country 为空或为空。但是,如果我将 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

模型

class Book(models.Model):
    author = models.ManyToManyField(Author, related_name='authors')
    editor = models.ManyToManyField(Editor, related_name='editors')
    illustrator = models.ManyToManyField(Illustrator, related_name='illustrators')
    translator = models.ManyToManyField(Translator, related_name='translators')

    publisher = models.ForeignKey(Publisher, on_delete=models.PROTECT, blank=True, null=True)
    imprint = models.ForeignKey(Imprint, on_delete=models.PROTECT, blank=True, null=True)

    category = models.ManyToManyField(Category, related_name='categories')
    reference_ed = models.ManyToManyField(ReferenceEd, related_name='reference_eds')
    series = models.ManyToManyField(Series, related_name='series')

    language = models.ManyToManyField(Language, related_name='languages')
    language_original = models.ManyToManyField(LanguageOriginal, related_name='languages_original')

    country = models.ForeignKey(Country, on_delete=models.PROTECT, blank=True, null=True)
    country_original = models.ForeignKey(CountryOriginal, on_delete=models.PROTECT, blank=True, null=True)

    lit_country = models.ForeignKey(LitCountry, on_delete=models.PROTECT, blank=True, null=True)
    lit_period = models.ForeignKey(LitPeriod, on_delete=models.PROTECT, blank=True, null=True)

    edition = models.ForeignKey(Edition, on_delete=models.PROTECT, blank=True, null=True)
    edition_st = models.ForeignKey(EditionSt, on_delete=models.PROTECT, blank=True, null=True)
    illustration = models.ForeignKey(Illustration, on_delete=models.PROTECT, blank=True, null=True)

    binding = models.ForeignKey(Binding, on_delete=models.PROTECT, blank=True, null=True)
    book_format = models.ForeignKey(BookFormat, on_delete=models.PROTECT, blank=True, null=True)
    font = models.ForeignKey(Font, on_delete=models.PROTECT, blank=True, null=True)
    paper = models.ForeignKey(Paper, on_delete=models.PROTECT, blank=True, null=True)

    ages = models.ManyToManyField(Ages, related_name='ages')
    grades = models.ManyToManyField(Grade, related_name='grades')

    isbn13 = models.CharField(max_length=20, unique=True, null=True, blank=True)
    isbn10 = models.CharField(max_length=20, unique=True, null=True, blank=True)
    title = models.CharField(max_length=500)
    image = models.CharField(max_length=20, blank=True, null=True)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('books:book_detail', args=[str(self.id)])

    class Meta:
        verbose_name = 'Book'
        verbose_name_plural = 'Books'


class BookText(models.Model):
    book = models.OneToOneField(Book, on_delete=models.PROTECT)
    about = models.TextField(null=True, blank=True)
    review = models.TextField(null=True, blank=True)
    qoute = models.TextField(null=True, blank=True)

    def __str__(self):
        return self.about
    
    class Meta:
        verbose_name = 'BookText'
        verbose_name_plural = 'BooksTexts'


class BookInfo(models.Model):
    book = models.OneToOneField(Book, on_delete=models.PROTECT)
    price = models.CharField(max_length=20, blank=True, null=True)
    pages = models.PositiveIntegerField(null=True, blank=True)
    hours = models.PositiveSmallIntegerField(null=True, blank=True)
    weight = models.CharField(max_length=10, blank=True, null=True)
    dimensions = models.CharField(max_length=25, null=True, blank=True)
    rating = models.DecimalField(max_digits=4, decimal_places=2, null=True, blank=True)
    bestseller = models.PositiveIntegerField(null=True, blank=True)
    circulation = models.PositiveIntegerField(null=True, blank=True)
    pub_date = models.DateField(null=True, blank=True)
    pub_date_first = models.DateField(null=True, blank=True)

    def __str__(self):
        return self.weight
    
    class Meta:
        verbose_name = 'BookInfo'
        verbose_name_plural = 'BooksInfo'

class Category(models.Model):
    name = models.CharField(max_length=250, unique=True)
    
    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('books:category_detail', args=[str(self.id)])

    class Meta:
        verbose_name = 'Category'
        verbose_name_plural = 'Categories'

【问题讨论】:

  • 您正在将字符串与 int 进行比较,但无论如何,这不是您应该如何过滤。分享相关观点。
  • 我已将视图添加到我的问题中
  • @djangodjames 你也可以分享你的BookCategoryBookTextBookInfo 模型。
  • 在我的问题中添加了模型
  • 如果您只是比较一本书,请在您的上下文中发送这本书。

标签: django templates get request


【解决方案1】:

你试过了吗?

<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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-31
    • 2015-03-24
    • 2023-03-08
    • 2015-03-29
    • 2011-04-28
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多