Пользователь
0,0
рейтинг
5 августа 2011 в 22:45

Разработка → django-php: PHP в шаблонах Django

django-phpВ этом посте я расскажу, как подружить Django и PHP с помощью приложения django-php.

Нам понадобится бинарник php-cgi, установленный в системе. Проверить его наличие можно, введя в терминале

$ which php-cgi


Установка


django-php доступно в PyPI и устанавливается привычным способом:


$ pip install django_php
# или
$ easy_install django_php

В файле settings.py, добавьте 'django_php' в список INSTALLED_APPS. Помимо этого, можно указать (а можно и не указывать) путь к php-cgi:

PHP_CGI = '/usr/local/bin/php-cgi'

Использование


В шаблоне загружаем библиотеку php:

{% load php %}

django-php предоставляет нам в пользование два тега, {% php %} и {% startphp %}...{% endphp %}. Однострочные вызовы выглядят так:

{% php echo 9; %}

или, например:

{% php phpinfo(); %}

или даже так:

{% php for ($i = 0; $i < 8; ++$i) { %}
    <li>{% php echo $i; %}</li>
{% php } %}

Для более обширных участков кода применяется блочный тег:

{% startphp %}
$str = '{{ str|addslashes }}';
$str = strrev($str);
echo strtoupper($str);
{% endphp %}

Ограничения альфа-версии


Это самая первая версия django-php, и на данный момент она не умеет fcgi, не может работать с печеньем, _GET, _POST, отправлять заголовки.

Демонстрационный проект доступен в репозитории (ссылка на GitHub) вместе с исходниками самого приложения.
Рей @printf
карма
105,5
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (66)

  • +28
    Вы молодец. Но зачем? O_o
    • +16
      Этот вопрос включен в FAQ на сайте :)
      Ради стёба, на самом деле. Нет никаких причин использовать это на практике.
      • +3
        вижу массу причин не использовать это на практике :)
        • –6
          Вроде как общепризнано, что PHP самый мощный шаблонизатор :)
          • 0
            Ну… Если это так важно — писать логику на шаблонизаторе…
  • +26
    Сжечь! ;)
    • –1
      и съесть :_
    • –2
      Ведьма!!!
  • +1
    Мсье знает толк в извращениях :)
  • +16
    Шутку понял, юмор оценил.
    • +2
      Ещё сделать именно fast_cgi, и станет совсем смешно.
      • +1
        Да-да, я хотел сделать, но запутался и решил выложить первую версию совсем простую.
        • +2
          Хорошее упражнение познания thread будет :)
  • –1
    Мне кажется, это только чтобы заюзать готовые куски говнокода при срочном переписывании всего на «Тру» движке.
  • +1
    вот не надо теперь Джангу хотеть…
  • +7
    Я всегда говорил, что пхп — шаблонизатор. Всё правильно сделали.
    • +3
      да, один из лучших, даже в джанге его захотели юзать.
      • +3
        Надо Битрикс запустить.
        • 0
          не видел в роудмапе, но перед версией 1.0 stable полюбасу должно быть.
  • +3
    А он Джумлу поддерживает?
  • +4
    А мне нравится, что слоник улыбается
    • +4
      А вот что получилось после их союза
      image
  • +14
    А может лучше уж сразу, полностью заменить язык шаблонов в джанго на php? Передавать контекст, обязательно подключить какой-либо акселератор — мы выйдем на новые горизонты!
    У джанго совершенно убогие шаблоны, ни тебе доступа к БД, ни сокетов. Поэтому я считаю, что вы молодец. Все эти жалкие попытки в виде haml, jinja2, mako и mint явно были заблуждением.
    • 0
      Не пойму, то ли это сарказм, то ли вы серьезно?
      • +2
        я тоже не сразу понял, что это стеб)
    • +2
      вы их готовить не умеете
      • +1
        Я умею, я выкидываю их и использую jinja2.
        Но топик не о шаблонах, а о крутейшем трололо, которому было не лениво сляпать такое :)
        • +2
          >Я умею, я выкидываю их и использую jinja2.

          тот еще кусок добра, на самом деле.
          • 0
            О, вот это было бы очень интересно — какие минусы в джиндже вы увидели? Чем пользуетесь?
            • 0
              пользовался jinja2 в tipfy. если подумать и вспомнить, то наверное у меня больше претензий к костыляминтеграции их — куча всякой херни вроде некомпилящихся шаблонов при наличии кастомного фильтра, потомучто он не подгружен из скрипта компиляции, а захукаться и подгрузить нельзя.

              в документации черт ногу сломит — вроде бы все есть, но пока нашел, как макросы делаются, чуть не заеустал.

              ну и отладка скомпилированных шаблонов — тот еще праздник души, традиционно.

              разумеется, это все преодолимо. еще что-то мне там нервы портило знатно, но вспомнить не могу.
    • +1
      Если следовать MVC, а не городить логику во вьювере то больше чем jinja2 имхо не понадобится, доступ к БД из шаблонизатора входит чуть более чем полностью в разрез с архитектурой MVC django.
      • –3
        Если следовать MVC джанго, то в шаблоны надо передавать готовые куски html-я, чтобы не дай бог какую логику в шаблоны не затянуло. И логика представления ложится ровным слоем в templatetags и во вьюхах.
        Шаблоны джанго это первое, что нужно сразу же от нее отрывать. Потом мы переходим к ORM, попадаем в засаду, когда заказчик просит сложный отчетик, отрываем и пользуем sqlalchemy.
        Потом мы понимаем, что от джанги собственно ничего не осталось, и можно переходить к использованию Flask например.

        Ну а если не получается орм оторвать, то можно дополнить — github.com/Deepwalker/aldjemy
        • +1
          Быть может Вам просто нужны разные инструменты под специфические проекты? А не насиловать джангу пытаясь слепить из неё нечто универсальное.
          • 0
            Джанго и есть попытка слепить все в один проект. Синдром NIH, крайне урезанные инструменты, шаг влево вправо и начинаются костыльные кошмарики.

            Любой проект стартует ни разу не специфическим. Обычно начинается с того — ну тут пару страничек, тут простенько, ну и пока можно еще немного админкой попользоваться стандартной.
            Проблема в том, что любой проект заказчик хочет потом улучшить. В один прекрасный день вы упираетесь в то, что джанга она такая — для простеньких проектов, проект бывает таким в начале своей жизни. Но куда вы потом от нее денетесь? Весь проект перепишете? Заполните ее raw sql вставками? А тесты в sqlite уже пускать не сможете, БД не смените.

            Я долго могу каждый пункт разбирать, и пояснять почему сделано криво, и где лучше. Но вообще клуб django-haters он большой, где то были уже материалы в сети с подобным разбором.
            • 0
              Ну а порекомендуйте что-то, что вы используете для нетривиальных проектов в поздней стадии развития. (Twisted?)
              Не холивара ради, мне действительно интересно.
              • +1
                Нет, ну что вы, Twisted он не для того. Строить на twisted web проект вообще гибло. На Twisted надо писать какой-нибудь хитрый демон который что-то там распихивает из одного сокета в другой, или SIP-прокси с биллингом. В общем что-то сетевое под большой поток пакетов.

                К поздней стадии развития проект уже придет с какой-то конкретной технологией. Поэтому пространства для маневра в таких проектах немного. Какие-то революции там за один день не свершаются, если вообще стоят денег.

                Для web лично я возьму Flask, sqlalchemy, jinja2. С sqlalchemy SQL вам придется писать, только если вы его запихнете в хранимку на сервере. С jinja2 логика представления останется в шаблонах. Flask гибок, и я не думаю, что упрусь куда-то при его использовании. Хотя тут нужно больше опыта, на данный момент Flask все таки молод. С другой стороны его стиль мне уже хорошо знаком. В родственном Flask фреймворке Svarga я никуда не уткнулся на довольно большом проекте, и многие вещи, с которыми на джанго приходилось бодаться, я там вообще не замечая решал походя. Кстати из Svarga вышла Amalgam, тоже неплохо можно внедрить себе.

                В общем в моем личном списке Django не значится как инструмент номер один. Скорее как legacy.
                • 0
                  Спасибо за развернутый ответ, попробую поюзать это.
          • 0
            Тем не менее мы django конечно используем в работе, это такая латынь своеобразная. Но свои личные проекты я никогда на django не делаю.
            • 0
              А как в таком случае вы относитесь к ROR? Просто личный интерес )
              • 0
                Никак, спросите у ruby программистов.
  • +1
    Ужас какой.
  • +1
    хм, а переменные в него передаются?
    • +2
      $str = '{{ str|addslashes }}';

      Пока только так. В следующей версии обязательно будет.
      • +9
        будет следующая версия?)
  • –2
    Что курили когда придумали этот проект? :)
  • –3
    Помоему пони здорово так пернула тучку… слоник наверно тяжелый…
    Кстати, че слоник… я всегда думал, что это маскот постгре!
  • +1
    Нафиг надо?)
    Есть же Twig!)
  • +1
    вырвало, простите…
  • –3
    Я вот не понимаю. Если мне нужно развлечься — я пишу на Джанге. Если нужно, чтобы было быстро и надежно — на плюсах. Если тупо и кондово, и чтобы потом легко найти разработчика на поддержку — на ПХП.

    Каждый язык, технология, фреймворк — для своей цели. И для одной цели можно выбрать несколько решений, причем часто это вопрос вкуса (вот меня прет Джанго и Питон, а Руби на Рельсах я просто уважаю, но выбрал не его).

    А тут — блевать их тянет, бля. Пипец, просто. А меня блевать тянет от тех, кто хорошо знает одну технологию и остальные из-за этого презирает, потому что писать на них нормально не умеет. А то говнокодеры есть и на питоне, и на яве — велкам ту говнокод.ру или thedailywtf, убедиться в этом.

    Автор молодец. Написал велосипед, получил опыт, и неплохо поржал, думаю, над своим приколом. Ждем теперь пхп в перле, яве и плюсах.
    • +2
      Вообще-то пхп в яве уже есть, есть и ява в пхп, так же есть и php в c++. С перлом тоже видел обратное. так что велосипедов уже создано довольно много…
      • –7
        make me развидеть это :)

        сорри, просто не гуглил, и дописал в качестве шутки тот абзац.
  • 0
    Да, веселые товарищи, авторы этого чуда :)
  • 0
    сразу вспомнил PyHP
  • 0
    все мега-тру-девелоперам (которые 50 лет програмили на php и в памяти которых он остался как шаблонизатор) посвящается: PiP — Python in PHP…

    ps. срите в карму, малыши, мне похеру.
  • +10
    • 0
      ги :)
  • +3
    Вы топиком ошиблись)) Здесь явно ненормальным программированием пахнет!
    • 0
      здесь джанго-пых, вот им и пахнет — а вы думали там просто облачко нарисовано?)
  • 0
    Лучше бы наоборот, Python в PHP сделали
  • 0
    Я понял что не первый, но уже с заголовка присел и репу почесал.
  • 0
    што?
  • 0
    Осталось прикрутить Symfony2 и пользовать twig/django шаблоны ;)
  • 0
    убиться ложкой
  • 0
    О! А давайте напишем темплейт-тег, который позволит делать SQL-запросы прям из шаблонов ^__^

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