from django import template
template.add_to_builtins('project.app.templatetags.custom_tag_module')
如果您将此项放在一个模块中,'s loaded by default (your main urlconf for instance), you' ll可以在任何模板中使用自定义标记模块中的标记和过滤器,而不使用 {% load custom_tag_module %} .
传递给 template.add_to_builtins() 的参数可以是任何模块路径;您的自定义标记模块没有't have to live in a specific application. For example, it can also be a module in your project'的根目录(例如 'project.custom_tag_module' ) .
from django.utils.translation import ugettext_lazy as _
class Post(models.Model):
title = models.CharField(_('title'), max_length=255)
body = models.TextField(_('body'))
created = models.DateTimeField(auto_now_add=True)
import twitter
from django.core.cache import cache
from django.db.models.signals import post_save
from django.conf import settings
def posted_blog(sender, created=None, instance=None, **kwargs):
''' Listens for a blog post to save and alerts some services. '''
if (created and instance is not None):
tweet = 'New blog post! %s' instance.title
t = twitter.PostUpdate(settings.TWITTER_USER,
settings.TWITTER_PASSWD,
tweet)
cache.set(instance.cache_key, instance, 60*5)
# send pingbacks
# ...
# whatever else
else:
cache.delete(instance.cache_key)
post_save.connect(posted_blog, sender=Post)
我使用Jinja2,它几乎就像是django模板语言的加电版本,它使用相同的语法,并允许你在if语句中使用表达式!不再制作自定义的if-tags,例如 if_item_in_list !你可以简单地说 %{ if item in list %} ,或 {% if object.field < 10 %} .
30 回答
使用IPython跳转到任何级别的代码并使用IPython的强大功能进行调试 . 一旦安装了IPython,只需将此代码放在要调试的任何位置:
然后,刷新页面,转到runserver窗口,您将进入交互式IPython窗口 .
我在TextMate中设置了一个代码段,所以我只需输入ipshell并点击tab . 没有它我就活不下去 .
运行开发SMTP服务器,只输出发送给它的任何内容(如果您不想实际安装SMTP)你的开发服务器 . )
命令行:
来自django-admin documentation:
如果您使用Bash shell,请考虑安装Django bash完成脚本,该脚本位于Django发行版的
extras/django_bash_completion
中 . 它启用django-admin.py
和manage.py
命令的制表符完成,因此您可以,例如......键入
django-admin.py
.按[TAB]查看所有可用选项 .
键入
sql
,然后键入[TAB],查看名称以sql
开头的所有可用选项 .我只想从自己的小贴士开始:)
Use os.path.dirname() in settings.py to avoid hardcoded dirnames.
如果要在不同位置运行项目,请不要在settings.py中对路径进行硬编码 . 如果模板和静态文件位于Django项目目录中,请在settings.py中使用以下代码:
致谢:我从截屏视频'Django From the Ground Up'得到了这个提示 .
安装Django Command Extensions和pygraphviz,然后发出以下命令以获得非常漂亮的Django模型可视化:
使用django-annoying's
render_to
装饰器而不是render_to_response
.编辑指出返回一个HttpResponse(如重定向)将使装饰器短路并按预期工作 .
我在网站的模板上使用了一组自定义标签 . 正在寻找一种自动加载它的方法(干,记得吗?),我发现了以下内容:
如果您将此项放在一个模块中,'s loaded by default (your main urlconf for instance), you' ll可以在任何模板中使用自定义标记模块中的标记和过滤器,而不使用
{% load custom_tag_module %}
.传递给
template.add_to_builtins()
的参数可以是任何模块路径;您的自定义标记模块没有't have to live in a specific application. For example, it can also be a module in your project'的根目录(例如'project.custom_tag_module'
) .Virtualenv Python =生命保护程序,如果您正在处理多个Django项目,并且它们都可能不依赖于相同版本的Django /应用程序 .
不要硬编码您的网址!
改为使用url names和reverse函数来获取URL本身 .
定义URL映射时,请为URL指定名称 .
确保每个URL的名称唯一 .
我通常使用一致的格式“project-appplication-view”,例如“cbx-forum-thread”用于线程视图 .
UPDATE (无耻地偷窃ayaz's addition):
此名称可以在url tag的模板中使用 .
使用django debug toolbar . 例如,它允许查看渲染视图时执行的所有SQL查询,您还可以查看其中任何一个的堆栈跟踪 .
不要编写自己的登录页面 . 如果您正在使用django.contrib.auth .
真正的,肮脏的秘密是,如果你也使用django.contrib.admin,并且django.template.loaders.app_directories.load_template_source在你的模板加载器中, you can get your templates free too!
上下文处理器非常棒 .
假设您有不同的用户模型,并且希望在每个响应中包含该模型 . 而不是这样做:
上下文进程使您能够将任何变量传递给模板 . 我通常把我放在
'my_project/apps/core/context.py
:在
settings.py
中将以下行添加到TEMPLATE_CONTEXT_PROCESSORS
现在每次发出请求时,它都会自动包含
my_user
键 .也是胜利的信号 .
几个月前我写了一篇关于这篇文章的博文,所以我只是剪切和粘贴:
开箱即用Django为您提供了几个非常有用的信号 . 您可以在保存,初始化,删除之前或之后执行操作,甚至可以在处理请求时执行操作 . 因此,让我们远离概念并演示如何使用这些概念 . 说我们有一个博客
因此,不知何故,您想要通知我们发布新帖子的许多博客ping服务之一,重建最新的帖子缓存,并发布有关它的推文 . 有了信号,你就可以完成所有这些操作而无需向Post类添加任何方法 .
我们通过定义该函数并使用post_init信号将函数连接到Post模型并在保存后执行它 .
当我开始时,我不知道有一个Paginator,确保你知道它的存在!
django_extensions附带的
./manage.py runserver_plus
facilty非常棒 .它创建了一个增强的调试页面,除其他外,它使用Werkzeug调试器为堆栈中的每个点创建交互式调试控制台(参见屏幕截图) . 它还提供了一个非常有用的方便调试方法
dump()
,用于显示有关对象/帧的信息 .要安装,您可以使用pip:
然后将
'django_extensions'
添加到settings.py
中的INSTALLED_APPS
元组并使用新扩展启动开发服务器:这将改变您的调试方式 .
我喜欢使用Python调试器pdb来调试Django项目 .
这是学习如何使用它的有用链接:http://www.ferg.org/papers/debugging_in_python.html
当试图在Django和另一个应用程序之间交换数据时,
request.raw_post_data
是一个好朋友 . 使用它来接收和自定义处理XML数据 .文件:http://docs.djangoproject.com/en/dev/ref/request-response/
在视图代码中添加
assert False
以转储调试信息 .与Django一起使用Jinja2 .
如果你发现Django模板语言受到极大限制(比如我!)那么你就不必坚持下去了 . Django非常灵活,模板语言与系统的其他部分松散耦合,因此只需插入另一种模板语言并使用它来呈现您的http响应!
我使用Jinja2,它几乎就像是django模板语言的加电版本,它使用相同的语法,并允许你在if语句中使用表达式!不再制作自定义的if-tags,例如
if_item_in_list
!你可以简单地说%{ if item in list %}
,或{% if object.field < 10 %}
.但那还不是全部;它有更多的功能来简化模板创建,我不能在这里完成所有这些功能 .
这增加了上面关于Django URL names and reverse URL dispatching的回复 .
URL名称也可以在模板中有效使用 . 例如,对于给定的URL模式:
您可以在模板中包含以下内容:
由于Django“views”只需要是返回HttpResponse的callables,因此您可以轻松地创建类似于Ruby on Rails和其他框架的基于类的视图 .
有几种方法可以创建基于类的视图,这是我的最爱:
您可以在基本视图中添加各种其他内容,例如条件请求处理和授权 .
一旦你获得了你的视图设置,你的urls.py将如下所示:
而不是使用
render_to_response
将您的上下文绑定到模板并呈现它(这是Django文档通常显示的内容)使用通用视图direct_to_template . 它与render_to_response
做了同样的事情,但它也自动将RequestContext添加到模板上下文,隐式允许使用上下文处理器 . 您可以使用render_to_response
手动执行此操作,但为什么要这么麻烦?这只是记住另一个LOC的又一步 . 除了使用上下文处理器之外,在模板中使用RequestContext还可以执行以下操作:这非常有用 . 实际上,一般来说一般都是1 . Django文档主要将它们显示为甚至没有简单应用程序的views.py文件的快捷方式,但您也可以在自己的视图函数中使用它们:
重要的是要注意,如果你打算使用Jinja,它不支持模板块名称中的'-'字符,而Django则支持.1758651_字符 . 这给我带来了很多问题,并且浪费时间试图追踪它生成的非常模糊的错误消息 .
webdesign app在开始设计您的网站时非常有用 . 导入后,您可以添加此项以生成示例文本:
django.db.models.get_model
允许您在不导入模型的情况下检索模型 .詹姆斯表明它有多么方便:"Django tips: Write better template tags — Iteration 4 " .
大家都知道有一个可以用“manage.py runserver”运行的开发服务器,但是你知道有一个服务静态文件(CSS / JS / IMG)的开发视图吗?
新人是总是感到困惑,因为Django没有任何方式来提供静态文件 . 这是因为开发团队认为它是现实生活中Web服务器的工作 .
但是在开发时,你可能不想设置Apache mod_wisgi,它很重 . 然后你可以将以下内容添加到urls.py:
您的CSS / JS / IMG将在www.yoursite.com/site_media/上提供 .
当然,不要在 生产环境 环境中使用它 .
我从sorl-thumbnails app的文档中学到了这一点 . 您可以在模板标记中使用"as"关键字来使用模板中其他位置的调用结果 .
例如:
这在Django templatetag文档中提到,但仅参考循环 . 他们并不是说你可以在其他地方(任何地方?)使用它 .
django.views.generic.list_detail.object_list - 它提供了分页的所有逻辑和模板变量(其中一个我已经写过的那一千次现在的苦差事) . Wrapping it允许您需要的任何逻辑 . 这个gem在我的"Search Results"页面中为我节省了数小时的调试错误,并使视图代码更加清晰 .
PyCharm IDE是一个很好的代码,特别是调试环境,内置了对Django的支持 .
使用xml_models创建使用XML REST API后端(而不是SQL后端)的Django模型 . 这在建模第三方API时非常有用 - 您可以获得与之相同的QuerySet语法 . 您可以从PyPI安装它 .
来自API的XML:
而现在在python中:
它还可以处理关系和集合 . 我们每天都在大量使用的 生产环境 代码中使用它,所以即使它是beta版,它也非常实用 . 它还有一组很好的存根,可以在测试中使用 .
(免责声明:虽然我不是这个库的作者,但我现在是一个提交者,做了一些小的提交)
使用数据库迁移 . 使用South .