Я новичок в Django, и мне трудно понять, как распечатать то, что у объекта есть внутри. Я имею в виду тип и значение переменной с ее членами внутри. Так же, как функция dd(object) в Laravel. dd() от Laravel - удобный инструмент для отладки приложения.
Я искал это. Но ничего полезного не нашел. Я пробовал pprint(), simplejson, print(type(object) и {% debug %}. Но ни один из них не мог предоставить требуемую информацию об объекте.
Вот пример вывода функции dd() Laravel.

На этом изображении я печатаю объект запроса Laravel. как вы можете видеть, он показывает полную информацию об объекте. Я имею в виду имя класса, к которому он принадлежит, его переменные-члены. также с именем и значением класса. и он продолжает копать глубоко внутри объекта и печатает всю информацию.
Но я не могу найти подобный инструмент в Django. Трудно поверить, что у Django нет такого полезного инструмента. Поэтому я хотел бы знать о любом стороннем пакете, который может помочь.
Я использую Django версии 2.0.5. и пытаюсь распечатать django.contrib.messages
Кроме того, я хочу, чтобы вывод отображался в браузере, а не в консоли. Хорошо читаемым образом, поэтому я прошу пакет Django, который может принимать объект и отображать правильно сформированное представление объектной архитектуры.
Возможный дубликат Есть ли встроенная функция для печати всех текущих свойств и значений объекта?






Вы ищете недвижимость __dict__ или dir()
print(object.__dict__)
Используйте pprint для улучшения вывода
from pprint import pprint
pprint(dir(object))
как я могу увидеть это в браузере, например в laravel?
@roll you нет простого способа сделать это, используйте вывод консоли
также можно использовать vars, если вы хотите увидеть значения: from pprint import pprint pprint (vars (prospect))
Поднимите исключение. Предполагая, что у вас есть отладка, вы увидите сообщение об исключении. Это грубо, но в прошлом мне помогало.
Просто:
raise Exception("I want to know the value of this: " + myvariable_as_a_string)
Другие ответы и комментаторы проигнорировали важную часть функции dd (), которая предотвращает такие вещи, как последующие перенаправления.
На самом деле Django не предоставляет этой специализированной функции. Поэтому, чтобы избавиться от этой проблемы, я создал специальную функцию типа dd() и использую ее во всех проектах Django. Возможно, это кому-то поможет.
Предположим, у нас есть папка библиотеки с именем app_libs, и в этой папке у нас есть файл библиотеки с именем dump.py. Нравится app_libs > dump.py:
from django.core import serializers
from collections.abc import Iterable
from django.db.models.query import QuerySet
from django.core.exceptions import ObjectDoesNotExist
def dd(request, data=''):
try:
scheme = request.scheme
server_name = request.META['SERVER_NAME']
server_port = request.META['SERVER_PORT']
remote_addr = request.META['REMOTE_ADDR']
user_agent = request.META['HTTP_USER_AGENT']
path = request.path
method = request.method
session = request.session
cookies = request.COOKIES
get_data = {}
for key, value in request.GET.lists():
get_data[key] = value
post_data = {}
for key, value in request.POST.lists():
post_data[key] = value
files = {}
for key, value in request.FILES.lists():
files['name'] = request.FILES[key].name
files['content_type'] = request.FILES[key].content_type
files['size'] = request.FILES[key].size
dump_data = ''
query_data = ''
executed_query = ''
if data:
if isinstance(data, Iterable):
if isinstance(data, QuerySet):
executed_query = data.query
query_data = serializers.serialize('json', data)
else:
dump_data = dict(data)
else:
query_data = serializers.serialize('json', [data])
msg = f'''
<html>
<span style = "color: red;"><b>Scheme</b></span> : <span style = "color: blue;">{scheme}</span><br>
<span style = "color: red;"><b>Server Name</b></span> : <span style = "color: blue;">{server_name}</span><br>
<span style = "color: red;"><b>Server Port</b></span> : <span style = "color: blue;">{server_port}</span><br>
<span style = "color: red;"><b>Remote Address</b></span>: <span style = "color: blue;">{remote_addr}</span><br>
<span style = "color: red;"><b>User Agent</b></span> : <span style = "color: blue;">{user_agent}</span><br>
<span style = "color: red;"><b>Path</b></span> : <span style = "color: blue;">{path}</span><br>
<span style = "color: red;"><b>Method</b></span> : <span style = "color: blue;">{method}</span><br>
<span style = "color: red;"><b>Session</b></span> : <span style = "color: blue;">{session}</span><br>
<span style = "color: red;"><b>Cookies</b></span> : <span style = "color: blue;">{cookies}</span><br>
<span style = "color: red;"><b>Get Data</b></span> : <span style = "color: blue;">{get_data}</span><br>
<span style = "color: red;"><b>Post Data</b></span> : <span style = "color: blue;">{post_data}</span><br>
<span style = "color: red;"><b>Files</b></span> : <span style = "color: blue;">{files}</span><br>
<span style = "color: red;"><b>Executed Query</b></span>: <span style = "color: blue;"><br>{executed_query}</span><br>
<span style = "color: red;"><b>Query Data</b></span> : <span style = "color: blue;"><br>{query_data}</span><br>
<span style = "color: red;"><b>Dump Data</b></span> : <span style = "color: blue;"><br>{dump_data}</span><br>
</html>
'''
return msg
except ObjectDoesNotExist:
return False
когда вам нужно использовать эту функцию, просто вызовите ее так в любом views.py:
from django.http import HttpResponse
from django.shortcuts import render
from django.views import View
from app_libs.dump import dd
from .models import Products
class ProductView(View):
def get(self, request):
data = {}
data['page_title'] = 'products'
data['products'] = Products.objects.get_all_product()
template = 'products/collections.html'
dump_data = dd(request, data['products'])
return HttpResponse(dump_data)
# return render(request, template, data)
это оно.
You can set breakpoint just after variable you need to inspect.
# for example your code looks like
...other code
products = Product.objects.all()
# here you set a breakpoint
breakpoint()
...other code
Now you need to call you code in this exact location and due to breakpoint it stops.
Then you want to look up in terminal, it switched to special mode where you need to
enter code like this one:
products.__dict__ # and hit enter. Now you'll see all properties in your variable.
Возможный дубликат Список атрибутов объекта