Baltrunas/django-banners

Вывод

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?