Это не аргумент. Грамотный разработчик использует то, что лучше подходит для решения конкретной задачи по объективным критериям, а не оперирует слепым «как все».
> не знаю ни одного приличного сайта, использующего name
По (действующему) стандарту HTML4 <a name="xxx"> и id="xxx" равноправны и ни один из них не deprecated. Разница в том, что id должен начинаться с буквы и может содержать только [a-z0-9]. Для name такие строгие правила не действуют, например, можно использовать entities. Стандарт даже специально описывает, что если нужны более сложные якоря, то следует использовать <a name>, пруфлинк: www.w3.org/TR/REC-html40/struct/links.html#anchors-with-id (зелененьким внизу)
Действительно, в (будущем) стандарте HTML5 <a name> отменен. Но в нем и правила для id ослаблены (может содержать любые символы, необязательно уникальный).
Но в данный момент единственный способ иметь сложные якоря и соответствовать стандарту — использовать name (то что валидатор w3c пропускает невалидные id — баг).
Т. е. лучше всего оригинальный typographus.py положить туда где его сможет найти питон (в PYTHONPATH...).
В директории templatetags создать новый файл typograhus.py (лучше бы конечно по-другому назвать, что-нибудь типо typo_filters.py).
В него поместить код фильтра, а нужную функцию typo — импортировать.
Все, пошел спать, а-то мысли сонно спотыкаются на ходу.
Но строчкой
from engine.common.typographus import typo (у вас она должна быть from typographus import typo)
я импортирую в модуль функцию typo, чтобы не было конфликта имен надо функцию-фильтр назвать как-то по-другому. В джанге принято в таких случаях приписывать do_* что я и сделал
1) Патчим typographus.py, иначе он не примет результат работы force_unicode.
В 128 строке заменяем:
if type(string) is not unicode:
на:
if not isinstance(string, unicode):
2) Грамотно пишем фильтр, помня о безопасности (простите, карма не позволяет <pre></pre> использовать):
typographus.py:
from django import template
from django.template.defaultfilters import stringfilter
from django.utils.html import conditional_escape
from django.utils.safestring import mark_safe
Школьники для получения готовых ответов могут свободно использовать кучу подручных средств, начиная от калькулятора и заканчивая специализированными CAD системами. Поэтому не стоит осуждать поисковую систему за то, что они приделали еще немного функциональности.
позволяет понять разницу между обычным thread и daemonic thread, или как правильно демонизироваться в *nix окружении
Может это я такой, но не вижу в этих сакральных знаниях ничего экспертного. Это описывается в любой приличной книжке по программированию под никсы.
Впрочем, мне было бы интересно почитать про устройство (архитектуру, концепции) CPython изнутри. Т. к. копание в C API Reference и исходном коде не всегда продуктивно.
В любом случае, думаю не стоит судить книгу по оглавлению.
Ну что вы, многие страны имеют аналоги: http://en.wikipedia.org/wiki/Mass_surveillance
Впрочем, существует мнение, что обычному добропорядочному человеку скрывать нечего.
Знаете, Маркс писал, что нет ничего такого на что капиталист не пойдет ради 300% прибыли. Так что Брин смотрит как Гуглу получить максимальную прибыль и в Японии, и в Росии.
Вероятно автор хотел показать перемещение туда-сюда и изобразил стрелочки:
->
<-
Но лично я вижу не стрелочки, а кривую и неустойчивую лесенку с отрицательной динамикой.
Вспоминается старая цитата с БОРа: «В Вилларибо и Виллабаджо опять дедлайн. Пока ребята из Вилларибо верстают сайт дивами, ребята из Виллабаджо уже всё сверстали на таблицах и ебошат друг друга в квейк».
"новое заключается именно в правильном сочетании известных подходов" - так это и есть изобретение велосипеда, благо куча других языков поддерживают обе парадигмы и совсем не считают это своей уникальной возможностью.
И в чем проблема? Сайт + Django + CherryPy + небольшой скрипт для запуска прекрасно укладываются py2exe в экзешник, получается специализированный веб-сервер. В посте как раз предлагается запускать свой скрипт на чужом виндоусе при помощи portable python, я предлагаю альтернативный способ.
Это не аргумент. Грамотный разработчик использует то, что лучше подходит для решения конкретной задачи по объективным критериям, а не оперирует слепым «как все».
> не знаю ни одного приличного сайта, использующего name
www.w3.org/ неприличный?
Ниже прокомментировал про id vs name — они совсем не отменяют друг друга.
Действительно, в (будущем) стандарте HTML5 <a name> отменен. Но в нем и правила для id ослаблены (может содержать любые символы, необязательно уникальный).
Но в данный момент единственный способ иметь сложные якоря и соответствовать стандарту — использовать name (то что валидатор w3c пропускает невалидные id — баг).
В директории templatetags создать новый файл typograhus.py (лучше бы конечно по-другому назвать, что-нибудь типо typo_filters.py).
В него поместить код фильтра, а нужную функцию typo — импортировать.
Все, пошел спать, а-то мысли сонно спотыкаются на ходу.
Но строчкой
from engine.common.typographus import typo (у вас она должна быть from typographus import typo)
я импортирую в модуль функцию typo, чтобы не было конфликта имен надо функцию-фильтр назвать как-то по-другому. В джанге принято в таких случаях приписывать do_* что я и сделал
1) Патчим typographus.py, иначе он не примет результат работы force_unicode.
В 128 строке заменяем:
if type(string) is not unicode:
на:
if not isinstance(string, unicode):
2) Грамотно пишем фильтр, помня о безопасности (простите, карма не позволяет <pre></pre> использовать):
typographus.py:
from django import template
from django.template.defaultfilters import stringfilter
from django.utils.html import conditional_escape
from django.utils.safestring import mark_safe
from engine.common.typographus import typo
register = template.Library()
@register.filter('typo')
@stringfilter
def do_typo(value, autoescape=False):
____if autoescape:
________value = conditional_escape(value)
____return mark_safe(typo(value))
do_typo.needs_autoescape = True
3) Используем в шаблонах:
{% load typographus %}
{{ variable|typo }}
Впрочем, эта проверка вообще не нужна: декоратор stringfilter() вызовет force_unicode().
autoescape лучше не выключать, а использовать фильтр safe.
Может это я такой, но не вижу в этих сакральных знаниях ничего экспертного. Это описывается в любой приличной книжке по программированию под никсы.
Впрочем, мне было бы интересно почитать про устройство (архитектуру, концепции) CPython изнутри. Т. к. копание в C API Reference и исходном коде не всегда продуктивно.
В любом случае, думаю не стоит судить книгу по оглавлению.
Впрочем, существует мнение, что обычному добропорядочному человеку скрывать нечего.
->
<-
Но лично я вижу не стрелочки, а кривую и неустойчивую лесенку с отрицательной динамикой.