Вывод
Closed this issue · 33 comments
Подскажите? как вывести баннер на страницу
Invalid block tag on line 3: 'banner_one'. Did you forget to register or load this tag?
Приветствую, banner_one устарел и удален, документацию давно не обновлял. Сейчас примерно так:
{% load banners %}
{% banners 'group_slug' ['banners/default.html'] %}
group_slug - это ярлык указанный для группы банеров в админке, нужен только один можно закинуть в группу один.
Шаблон указывать не обязательно по умолчанию используется banners/default.html если он устраивает то достаточно сделать так:
{% load banners %}
{% banners 'group_slug' %}
Вот так теперь ругается
Exception Value: | context must be a dict rather than Context.
Какая версия django и python? модуль давно не обновлялся возможно нужно править.
Все стоит самое актуальное!
django 2.0.5
python 3.6.5
я так понял код устарел тут
`@register.simple_tag(takes_context=True)
def banners(context, group, tpl='banners/default.html'):
try:
page_url = context['request'].path_info
site = context['request'].site
group = BannerGroup.objects.get(slug=group)
good_urls = []
for url in URL.objects.filter(public=True, sites__in=[site]):
if url.regex:
url_re = re.compile(url.url)
if url_re.findall(page_url):
good_urls.append(url)
elif page_url == url.url:
good_urls.append(url)
banners = Banner.objects.filter(public=True, group=group, urls__in=good_urls)
except:
banners = False
group = False
if(banners and group):
context['banners'] = banners
context['group'] = group
t = template.loader.get_template(tpl)
return t.render(template.Context(context))`
последний коммит 2 года назад, на питоне 3 и джанго 2 даже не тестилось
пробуй так
@register.simple_tag(takes_context=True)
def banners(context, group, tpl='banners/default.html'):
try:
page_url = context['request'].path_info
site = context['request'].site
group = BannerGroup.objects.get(slug=group)
good_urls = []
for url in URL.objects.filter(public=True, sites__in=[site]):
if url.regex:
url_re = re.compile(url.url)
if url_re.findall(page_url):
good_urls.append(url)
elif page_url == url.url:
good_urls.append(url)
banners = Banner.objects.filter(public=True, group=group, urls__in=good_urls)
except:
banners = False
group = False
if(banners and group):
tpl_context['banners'] = banners
tpl_context['group'] = group
t = template.loader.get_template(tpl)
return t.render(tpl_context, request=context['request'])
Exception Value | name 'tpl_context' is not defined |
---|
def banners(context, group, tpl='banners/default.html'):
tpl_context = {}
try:
ошибок нет, но баннер не вывелся
{% load banners %}
{% banners 'aside' %}
sites подключен? проверять как домены настроены и url показа
Да, подключен!
Сейчас скрины сделаю
тут https://prnt.sc/jljhxn в url пропищи просто / домен и порт берутся с sites
к сожалению ничего не изменилось!
точно так выводить?
{% banners 'aside' %}
не {% banner_group 'aside' %}
точно banners, banner_group в шаблонном теге не осталось
просто строчкой {% banners 'aside' %}
или < img src="{% banners 'aside' %}" >
просто строчкой {% banners 'aside' %}
попробуй так, и скинь что консоль выводит
register.simple_tag(takes_context=True)
def banners(context, group, tpl='banners/default.html'):
print('banners %s' % group)
try:
page_url = context['request'].path_info
site = context['request'].site
group = BannerGroup.objects.get(slug=group)
good_urls = []
print(good_urls)
for url in URL.objects.filter(public=True, sites__in=[site]):
if url.regex:
url_re = re.compile(url.url)
if url_re.findall(page_url):
good_urls.append(url)
elif page_url == url.url:
good_urls.append(url)
banners = Banner.objects.filter(public=True, group=group, urls__in=good_urls)
except:
banners = False
group = False
print(banners)
print(group)
if(banners and group):
tpl_context['banners'] = banners
tpl_context['group'] = group
t = template.loader.get_template(tpl)
return t.render(tpl_context, request=context['request'])
.py", line 15
print('banners %s' % group)
^
IndentationError: expected an indented block
[23/May/2018 13:57:21] "GET / HTTP/1.1" 500 141268
обновил комент чтоб отступы остались
Exception Value: | Invalid block tag on line 35: 'banners', expected 'elif', 'else' or 'endif'. Did you forget to register or load this tag? |
---|
Exception Value | name 'tpl_context' is not defined |
---|
tpl_context так же добавить в строку после def banners(context, group, tpl='banners/default.html'):
да, добавил!
ошибок нет, но и баннера тоже))
что в консоль то написало?
[23/May/2018 14:06:08] "GET /favicon.ico HTTP/1.1" 404 5216
banners aside
False
False
[23/May/2018 14:06:09] "GET / HTTP/1.1" 200 22766
после try: строку print(context['request'])
и опять вывод консоли
banners aside
<WSGIRequest: GET '/'>
False
False
обновляем часть
try:
page_url = context['request'].path_info
print('page_url: %s' % page_url)
site = context['request'].site
print('site: %s' % site)
group = BannerGroup.objects.get(slug=group)
print('group: %s' % group)
good_urls = []
и опять вывод
banners aside
page_url: /
False
False
очень похоже что sites недо подключен
'django.contrib.sites', в INSTALLED_APPS ?
'django.contrib.sites.middleware.CurrentSiteMiddleware', в MIDDLEWARE ?
Да, ошибка!
Отсутствовал
'django.contrib.sites.middleware.CurrentSiteMiddleware',
Сейчас баннер вывелся!
Приогромное спасибо!
принты подчистить не забудь
@Baltrunas Снова здравствуйте!
Столкнулся с проблемой
MultipleObjectsReturned: get() returned more than one Banner -- it returned 2!
В группе делаю 2 баннера и при выводе нет ротатора!
А есть более подробный лог? сейчас остался только один шаблонный тег для вывода всей группы, нет ли групп с одинаковыми slug?