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) вместе с исходниками самого приложения.

    Средняя зарплата в IT

    111 111 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 6 788 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

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

    Комментарии 67

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

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

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

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

                                      разумеется, это все преодолимо. еще что-то мне там нервы портило знатно, но вспомнить не могу.
                                        0
                                        непоспоришь, доки у жинжи несколько разрозненые.
                                        но сам по себе весьма приятный шаблонизатор.
                                        и к кастомизации много возможностей.
                                        я к нему ещё параметрические дефайны както приделывал.
                                +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-запросы прям из шаблонов ^__^

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

                                                                Самое читаемое