一切!我正在写一个Django博客网站。
我是Django的新手。由于Django具有松散耦合的哲学,我相信在使用它们的框架时最好遵循他们的信念。
所以我在这里遇到了两难:
我想为我的博客设置一些变量,比如博客标题,标语,以及我写的每个博客主页上的最大摘要长度,以及我应该在每页的主页上显示多少博客摘要
我可以通过在我的Django项目中创建一个新的应用程序,并为我的网站的配置变量创建模型,然后从其他应用程序读取这些变量,但这种做法显然打破了松散耦合的哲学。
我能想到的唯一工作就是在我的网站.wsgi文件中设置环境变量(我使用Apache和mod_wsgi来提供Python脚本)但我不认为弄乱环境变量是“干净”的。
有人能建议我更好的解决方案吗?
答案 0 :(得分:9)
您可以做的第一件事就是在项目的设置模块中设置这些变量,许多应用都会这样做:
# settings
BLOG_TITLE = 'My title'
然后,一个好的做法是提供设置默认值,因此您的应用应该有一个设置文件
# 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
另一种方法是创建一个包含所有这些变量的“博客”模型,这可能会邀请您根据Django sites
让您的应用与博客相关联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)
现在,您可以从管理界面更改这些值,并在视图或上下文处理器中使用它们
site = Site.objects.get_current() # Installed Django Sites app and middleware
blog = site.blog
print blog.title
答案 1 :(得分:4)
您可以在app文件夹中创建设置或常量文件并使用它。这样,所有常量都将绑定到您的应用程序:
apps/
blog/
__init__.py
models.py
urls.py
constants.py # <-- here it is!
文件可能如下所示:
BLOG_TITLE = 'My super blog'
# ...
你可以使用这样的巡回常数:
import blog.constants
# ...
return render_to_response('index.html', {title: blog.constants.BLOG_TITLE})
在模板中:
<title>{{ title }}</title>