快速列出你的Django项目的所有设置

2 投票
4 回答
2211 浏览
提问于 2025-04-18 18:16

这可能对Python高手来说不是个难题,所以请帮帮我。我想快速列出我Django项目的所有设置。我想为此写一个简单的Python脚本(放在一个单独的文件里)。这是我开始的方式:

from django.conf import settings

settings.configure()
settings_list = dir(settings)

for i in settings_list:
    settings_name = i
    print settings_name

这样我可以得到所有设置的名称。不过在每个settings_name后面,我想打印出它的值。我试了很多方法,结果发现那些设置实际上是空的。例如:

print settings.INSTALLED_APPS

返回的是空列表。我是在Django的根目录下执行这个脚本,并且在项目的虚拟环境中。

请给我建议一个正确的方法,来打印出我Django项目的所有设置。

4 个回答

0

在编程中,有时候我们会遇到一些问题,想要找到解决办法。比如说,可能会有一些代码在运行的时候出现错误,或者我们想要实现某个功能却不知道怎么做。这时候,StackOverflow这个网站就非常有用。它是一个程序员交流的平台,大家可以在上面提问、回答问题,分享经验。

当你在StackOverflow上提问时,记得描述清楚你遇到的问题,提供相关的代码和错误信息,这样其他人才能更好地帮助你。同时,查看别人提问的内容和得到的回答,也能让你学到很多知识。

总之,StackOverflow是一个很好的学习和解决问题的地方,适合所有想要提高编程技能的人。

import django, os
from django.conf import settings
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings' # Settings will pick this up on lazy init.
for attr in dir(settings):
  print "%-40s: %s" % (attr, getattr(settings, attr))
0

这不是我期待的答案,但我找到了一种很好的方法,可以打印出Django项目的所有设置。

这个方法是通过安装一个叫django-print-settings的Python包来实现的:

pip install django-print-settings

我是在这里找到的这个信息 https://readthedocs.org/projects/django-print-settings/。请参考那个网站了解如何设置和使用。

3

你可以使用Django自带的一个功能叫做 diffsettings

from django.core.management.commands import diffsettings

output = diffsettings.Command().handle(default=None, output="hash", all=False)

desensitized = []
for line in output.splitlines():
    if "SECRET" in line or "KEY" in line:
        continue
    desensitized.append(line)
print("\n".join(desensitized)) 
2

这里有两个问题需要解决:1)设置是空的 2)如何遍历settings对象中的属性和值。

关于空设置 - 参考django文档

from django.conf import settings
settings.configure()
print settings.SECRET_KEY

这个应该可以正常工作,但不知道为什么在我这里不行。所以我用了下面这段代码,它对我有效:

from django.conf import settings
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'my_django_project.settings'
print settings.SECRET_KEY

然后为了从settings对象中收集属性和值,我使用了下面的代码,这段代码其实是我从django-print-settings借来的:

a_dict = {}

for attr in dir(settings):
    value = getattr(settings, attr)
    a_dict[attr] = value

for key, value in a_dict.items():
            print('%s = %r' % (key, value))

总结一下,我的print_settings.py文件中的完整代码现在是:

from django.conf import settings
import os

os.environ['DJANGO_SETTINGS_MODULE'] = 'my_django_project.settings'

a_dict = {}

for attr in dir(settings):
    value = getattr(settings, attr)
    a_dict[attr] = value

for key, value in a_dict.items():
            print('%s = %r' % (key, value))

撰写回答