所有!我正在写一个Django博客网站.
我是Django的新手.由于Django具有松散耦合的哲学,我相信在使用它们的框架时最好遵循他们的信念.
所以我在这里遇到了两难:
我想为我的博客设置一些变量,比如博客标题,口号和我写的每个博客主页上的最大摘要长度,以及我应该在每页的主页上显示多少博客摘要.
我可以通过在我的Django项目中创建一个新的应用程序,并为我的网站的配置变量创建模型,然后从其他应用程序读取这些变量,但这种做法显然打破了松散耦合的哲学.
我能想到的唯一工作就是在我的网站.wsgi文件中设置环境变量(我使用Apache和mod_wsgi来提供Python脚本)但我不认为弄乱环境变量是"干净"的.
谁能建议我一个更好的解决方案?
您可以做的第一件事是在项目的设置模块中设置这些变量,许多应用程序都这样做:
# settings
BLOG_TITLE = 'My title'
Run Code Online (Sandbox Code Playgroud)
然后,一个好的做法是提供设置默认值,因此您的应用应该有一个设置文件
# blog/settings.py
from django.conf import settings
BLOG_TITLE = getattr(settings, 'BLOG_TITLE', 'MY default title')
# Then wherever, views or context processor
from blog import settings # See how we're not importing project's settings
title = settings.BLOG_TITLE
Run Code Online (Sandbox Code Playgroud)
另一种方法是创建一个包含所有这些变量的"博客"模型,这可能会邀请您让您的应用程序按Django网站绑定博客
from django.contrib.sites.models import Site
class Blog(models.Model):
site = models.OneToOneField(Site) # Tied up to a Django site
title = models.CharField(max_length=256)
Run Code Online (Sandbox Code Playgroud)
现在,您可以从管理界面更改这些值,并在视图或上下文处理器中使用它们
site = Site.objects.get_current() # Installed Django Sites app and middleware
blog = site.blog
print blog.title
Run Code Online (Sandbox Code Playgroud)