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) вместе с исходниками самого приложения.
    Поделиться публикацией
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 66
    • +28
      Вы молодец. Но зачем? O_o
      • +16
        Этот вопрос включен в FAQ на сайте :)
        Ради стёба, на самом деле. Нет никаких причин использовать это на практике.
        • +3
          вижу массу причин не использовать это на практике :)
          • –6
            Вроде как общепризнано, что PHP самый мощный шаблонизатор :)
            • 0
              Ну… Если это так важно — писать логику на шаблонизаторе…
      • +26
        Сжечь! ;)
      • +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
                                              • +3
                                                Вы топиком ошиблись)) Здесь явно ненормальным программированием пахнет!
                                                • 0
                                                  здесь джанго-пых, вот им и пахнет — а вы думали там просто облачко нарисовано?)
                                                • 0
                                                  Лучше бы наоборот, Python в PHP сделали
                                                • 0
                                                  Я понял что не первый, но уже с заголовка присел и репу почесал.
                                                  • 0
                                                    што?
                                                    • 0
                                                      Осталось прикрутить Symfony2 и пользовать twig/django шаблоны ;)
                                                      • 0
                                                        убиться ложкой
                                                        • 0
                                                          О! А давайте напишем темплейт-тег, который позволит делать SQL-запросы прям из шаблонов ^__^

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