Эквивалент PHP «эхо-то; exit (); "с Python / Django?

18

Иногда лучший способ отладить что-то - напечатать некоторые материалы на странице и exit() , как я могу сделать это на сайте Python / Django?

например. в PHP:

echo $var;
exit();

Спасибо

    
задан adamJLev 30.04.2010 в 22:43
источник
  • почему бы не использовать die $ var; в первую очередь? –  knittl 30.04.2010 в 22:58
  • Я старался быть настолько ясным, насколько это возможно, если потенциальный «ответчик на вопрос python» не знал, что die == exit :) –  adamJLev 30.04.2010 в 23:02

4 ответа

15

Поместите это в свою функцию просмотра:

from django.http import HttpResponse
return HttpResponse(str(var))
    
ответ дан interjay 30.04.2010 в 22:45
  • Я пытаюсь сделать это из класса Middleware process_request, поэтому возврат HttpResponse в этот момент не сработает, не так ли? –  adamJLev 30.04.2010 в 22:52
  • На самом деле, после чтения документов Django, похоже, что если вы возвращаете HttpRequest, он останавливает все остальное и просто возвращает это. Спасибо! –  adamJLev 30.04.2010 в 22:56
  • Использование HttpResponse фактически прекратит напоминание о обработке представления, где, используя либо печать, либо добавление в контекст шаблона, вы можете просмотреть переданные данные. кроме того, если у вас установлена ​​панель инструментов отладки, вы можете просмотреть все переданные контекстные переменные, аккуратно представленные в ней. –  phoenix24 30.04.2010 в 23:49
13

Я просто хотел дать альтернативный ответ: просто используйте команды print и откройте свой сайт django с помощью python manage.py runserver

В этом случае команды print отображаются в вашей оболочке, и ваш сайт продолжает работать, как обычно.

    
ответ дан jdcantrell 30.04.2010 в 23:11
  • Отличный совет, спасибо! –  adamJLev 30.04.2010 в 23:56
  • Если вы не заперты в отладке через Apache (или что-то еще), трудно превзойти оперативность запуска сервера разработки и просто сделать print () s. Я часто могу выполнять цикл наблюдения-редактирования-перезагрузки в течение менее 20 или 30 секунд. –  Peter Rowell 01.05.2010 в 04:21
  • Просто не забудьте удалить эти заявления печати, когда вы закончите - оставив их в случае сбоя mod_wsgi! –  shacker 01.05.2010 в 09:32
  • Использовать mod_wsgi 3.X, и вы вполне можете оставить свои заявления «print», даже если ваше приложение WSGI не является переносимым WSGI-приложением. Читайте 'blog.dscpl.com.au/2009/04/... ;. –  Graham Dumpleton 01.05.2010 в 13:09
  • Apache / mod_wsgi также вполне может использоваться для разработки приложений Django, включая автоматическую перезагрузку кода. Читайте 'blog.dscpl.com.au/2008/12/...; и "blog.dscpl.com.au/2009/02/... ;. –  Graham Dumpleton 01.05.2010 в 13:11
1

Если вы используете mod_wsgi, вы можете сказать:

print var
raise SystemExit

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

Убедитесь, что вы используете mod_wsgi 3.X. Если вы используете более старый mod_wsgi, вам нужно будет сказать:

import sys
print >> sys.stderr
raise SystemExit

Другие серверы WSGI также могут обрабатывать SystemExit в запросе одинаково, скажем, вам нужно будет поэкспериментировать о том, что произойдет, если вы используете другое решение для хостинга.

Для получения дополнительной информации об отладке приложений WSGI читайте:

Ссылка

    
ответ дан Graham Dumpleton 01.05.2010 в 13:16
-1

Если вы не хотите разбивать mod_wsgi на печать, сделайте это в своем файле wsgi

sys.stdout = sys.stderr

потом будут отправлены на error_log

    
ответ дан Mike 01.05.2010 в 12:30
  • Не совсем правильно сказать, что mod_wsgi «сработает». Это использование «print» для stdout, которое было неправильным. Модуль mod_wsgi целенаправленно пытался заставить вас писать переносные приложения WSGI, отметив, что вы делаете это неправильно. Никто, кажется, не заботится, хотя их приложения WSGI не переносятся, и mod_wsgi отказался от попыток заставить вас поступать правильно в mod_wsgi 3.0. Другими словами, это не требуется в mod_wsgi 3.X и более поздних версиях. Читайте 'blog.dscpl.com.au/2009/04/... ;. –  Graham Dumpleton 01.05.2010 в 13:07