Найти - Пользователи
Полная версия: Вопрос по бутылке(bottle)
Начало » Web » Вопрос по бутылке(bottle)
1
Ennjin
Всем привет. Хотел бы узнать, можможно ли наследовать шаблоны из одного tpl файла в другой?
И есть ли в нем шаблонные тэги, чтобы не хардкодить ссылки, например

c url разобрался. Теперь хотелось бы узнать, если ли блоки как в джанге?
{% block content %}
{% endblock %}

что то вроде такого?

И еще. Как на бутылке писать модели и использовать их в шаблоне? Ну и в целом, в какую сторону копать, какую литературу читать
slav0nic
там есть https://bottlepy.org/docs/dev/stpl.html#stpl.rebase
Ennjin
Еще один вопрос. Как вывести в шаблон все записи из sqlite базы? у меня выводи только последнее.
код приложения
 def index():
	con = sqlite3.connect('data.db')
	cur = con.cursor()
	
	cur.execute("SELECT title FROM post")
	title = cur.fetchall()
	for value in title:
		title = '{0}'.format(value[0])
	cur.execute("SELECT text FROM post")
	text = cur.fetchall()
	for value in text:
		text = '{}'.format(value[0])
	cur.execute("SELECT author FROM post")
	author = cur.fetchall()
	for value in author:
		author = '{0}'.format(value[0])
	
	cur.close()
	return dict(url=url, title=title, text=text, author=author)

код шаблона
<h1>{{title}}</h1>
<p>{{text}}</p>
<p>Автор: {{author}}</p>

Понимаю что нужен цикл, но как именно его реализовать, если переменные три?
slav0nic
вы какую-то хрень написали

 SELECT title, author, text FROM post;
и пройтись циклом в шаблоне
Ennjin
slav0nic
вы какую-то хрень написали

Ваш вариант подходит для туду листа из туториала. Мне нужно сделать div блок для каждой записи, а не просто таблицу. Единственное что я пока не понимаю, как вывести все записи попорядку, а не только последнюю.
Ennjin
<div id="3">
<h1>Тест</h1>
<p>Тест</p>
<p>Автор: Тест</p>
</div>
<div id="2">
<h1>Тест</h1>
<p>Тест</p>
<p>Автор: Тест</p>
</div>
<div id="1">
<h1>Тест</h1>
<p>Тест</p>
<p>Автор: Тест</p>
</div>
Для див блока я добился того, что мне нужно. Осталось сделать так, чтобы контент внутри генерировался так же попорядку, как и id Блоки, а не только последний, который я добавил. При попомщи цикла сделать это не получается.

Код приложения.
 @route('/')
@view ('index')
def index():
	con = sqlite3.connect('data.db')
	cur = con.cursor()
	cur.execute("SELECT title, text, author FROM post")
	while True:
		result = cur.fetchone()
		if result == None:
			break
		title = result[0]
		text = result[1]
		author = result[2]
	cur.execute("SELECT id FROM post")
	post_id = cur.fetchall()
	post_id.sort(reverse=True)
	
	cur.close()
	
	return dict(url=url, title=title, text=text, author=author, post_id=post_id)

Код разметки
%for value in post_id:
%for id in value:
<div id="{{id}}">
<h1>{{title}}</h1>
<p>{{text}}</p>
<p>Автор: {{author}}</p>
</div>
%end
%end
slav0nic
дичь какая-то, а что, сразу id нельзя выбрать? да и к чему while True ещё и с сортировкой в питоне

во-первых пройдите базовый курс по sql, сортировать надо в sql запросе
во-вторых есть https://docs.python.org/3/library/sqlite3.html#sqlite3.Connection.row_factory для того чтоб можно было обращаться к элементу Row через аттрибут, а не индекс поля

в шаблон rows надо отдавать (желательно лимитом/пагинацией)
Ennjin
отсортировал в sql запросе.
 @route('/')
@view ('index')
def index():
	con = sqlite3.connect('data.db')
	cur = con.cursor()
	
	cur.execute("SELECT * FROM post ORDER BY id DESC")
	result = cur.fetchall()
	cur.close()
	
	return dict(url=url, rows=result)
slav0nic
во-вторых есть https://docs.python.org/3/library/sqlite3.html#sqlite3.Connection.row_factory для того чтоб можно было обращаться к элементу Row через аттрибут, а не индекс поля
можно подробнее про этот пункт, и что выводить в шаблон?
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