Найти - Пользователи
Полная версия: Как получить данные в шаблоне используя TemplateView
Начало » Django » Как получить данные в шаблоне используя TemplateView
1
Saturn
Помогите разобраться, почему не могу принять данные в шаблоне.

##views.py
class Sorted(TemplateView):
    template_name = "category.html"
    
def get_context_data(self, **kwargs):
    context = super(Sorted, self).get_context_data(**kwargs)
    context['brands'] = Brand.objects.all()
    context['sizes'] = Size.objects.all()
    return context


#urls.py
from product.views import Sorted
url(r'^(?P<sect>\w+)/cat/(?P<cat>\d+(-\d+)*)/$', Sorted.as_view()),


В шаблоне принимаю
{% for brand in brands %}
	<label class="checkbox">
	<input type="checkbox">
	<a href="/man/brand/{{ brand.id }}/">{{ brand.name }}</a>
	</label>
{% endfor %}

В результате возвращает пустой шаблон, но данные не выводит.
fata1ex
Вы представляете себе, что такое класс и наследование?
Saturn
fata1ex
Вы представляете себе, что такое класс и наследование?
Да представляю, но не в полной степени. А что ?
adw0rd
#models.py
class Sorted(TemplateView):

и

from product.views import Sorted

вам не кажется это странным?

И еще, перед "return context" сделайте вывод в консоль, есть там что? А лучше используйте debug_toolbar или pudb, например

fata1ex
Saturn
#models.py
class Sorted(TemplateView):
    template_name = "category.html"
    
def get_context_data(self, **kwargs):
    context = super(Sorted, self).get_context_data(**kwargs)
    context['brands'] = Brand.objects.all()
    context['sizes'] = Size.objects.all()
    return context
Это как вообще? Почитайте про то, что такое методы у классов.

Именно поэтому надо сначала учить питон. Или хотя бы учить его параллельно.
Saturn
adw0rd
Да, действительно, неправильно написал.
Должно быть
#views.py
class Sorted(TemplateView):

debug_toolbar
Показывает что нету SQL запросов к данным моделям.
Saturn
Действительно не заметил что в моем случае метод get_context_data не относится к данному
классу Sorted. Теперь все работает.
class SortedView(TemplateView):
    template_name = "category.html"
    
    def get_context_data(self, **kwargs):
        context = super(SortedView, self).get_context_data(**kwargs)
        cat = self.kwargs.get('cat', 1).replace("-",",")
        context['categories'] = Category.objects.filter(sect_id = get_section(self.kwargs.get('sect', None)))
        context['brands'] = Brand.objects.all()
        context['sizes'] = Size.objects.all()
        context['products'] = Product.objects.extra(where=['category_id IN (' + cat + ')']).select_related("brand")
        return context
reclosedev
Кстати
cat = self.kwargs.get('cat', 1).replace("-",",")
Если ‘cat’ не будет в kwargs,
1.replace("-", ",") # AttributeError: 'int' object has no attribute 'replace'

Да и незачем опускаться до raw:
context['products'] = Product.objects.extra(where=['category_id IN (' + cat + ')'])
когда можно:
categories = self.kwargs.get('cat', "1").split("-")
context['products'] = Product.objects.filter(category_id__in=categories)
Saturn
reclosedev
Дак у меня “cat” c url берется, если его не будет тогда Page not found 404
url(r'^(?P<sect>\w+)/cat/(?P<cat>\d+(-\d+)*)/$', SortedView.as_view()),

когда можно:
categories = self.kwargs.get('cat', “1”).split(“-”)
context = Product.objects.filter(category_id__in=categories)

Спасибо, так действительно намного лучше.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB