Использование колбы / светокопии для некоторых статических страниц - PullRequest
4 голосов
/ 14 августа 2011

Так что я просто немного запутался в том, как создавать страницы с флягой, не указывая каждое представление.

Как бы я нарисовал синюю печать, которая бы печаталась на страницах, которые я хочу загрузить?

скажем, это мои примеры страниц

templates/
   layout.html
   section1/
     subsection/index.html
     subsection2/index.html
   section2
     subsection/index.html
       childofsubsection/index.html

Я хотел бы предположить, что если я зайду на example.com/section1/subsection/, он будет знать, что ищет соответствующую страницу, не указывая специальноЭто.Документация http://flask.pocoo.org/docs/blueprints/ очень близка к объяснению этого, но я все еще немного растерян.

from flask import Flask
from yourapplication.simple_page import simple_page

app = Flask(__name__)
app.register_blueprint(simple_page)

также, не уверен, куда это должно было пойти?это выглядит так, как если бы он шел в application.py, но просит импортировать из "yourapplication"

Очень плохо знаком с flask и не является экспертом по Python.На самом деле просто нужно немного ошарашить:)

1 Ответ

12 голосов
/ 14 августа 2011

Если вы хотите увидеть пример использования Blueprint, вы можете взглянуть на этот ответ .

О части «автоматического поиска шаблонов» вашего вопроса: как объясняет документация, чертежи позволяют указать папку, в которой будут искать статические файлы и / или шаблоны, таким образом, вам не нужно указывать полный Путь к файлу шаблона в вашем вызове render_template(), но только имя файла.

Если вы хотите, чтобы ваши представления «волшебным образом» знали, какой файл они должны выбрать, вам нужно немного взломать. Например, решением может быть применение декоратора к вашему представлению, который заставит его выбрать файл шаблона на основе имени функции, такой декоратор будет выглядеть так:

from functools import wraps
from flask import render_template

def autorender(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        context = func(*args, **kwargs)
        return render_template('%s.html' % func.func_name, **context)
    return wrapper

Тогда вам просто нужно будет вернуть контекст в вашем представлении в виде диктата (или пустого диктанта, если контекст отсутствует):

@my_blueprint.route('/')
@autorender
def index():
    return {'name': 'John'} # or whatever your context is

И он автоматически выберет шаблон с именем index.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...