将任何您希望嵌入到您的Django应用程序文本中的内容。
项目描述
这是什么?
Django Inlines是一个应用程序,让您可以使用其他对象和特殊位嵌入到您的文本字段中。
它使用注册风格,因此很容易为您的任何应用程序或第三方应用程序设置内嵌。
示例
注册您的内嵌
from django_inlines import inlines from django_inlines.samples import YoutubeInline inlines.registry.register('youtube', YoutubeInline)
在您的 entry.body
<p>Check out my new video:</p> {{ youtube http://www.youtube.com/watch?v=RXJKdh1KZ0w }}
在您的模板中
{% load inlines %} {% process_inlines entry.body %}
输出
<p>Check out my new video:</p> <div class="youtube_video"> <object width="480" height="295"> <param name="movie" value="http://www.youtube.com/v/RXJKdh1KZ0w&hl=en&fs=1"></param> <param name="allowFullScreen" value="true"></param> <param name="allowscriptaccess" value="always"></param> <embed src="http://www.youtube.com/v/RXJKdh1KZ0w&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"></embed> </object> </div>
创建内嵌
内嵌可以是任何提供 render 方法并且具有可以接受以下参数的 __init__ 方法的类
__init__(self, value, variant=None, context=None, template_dir="", **kwargs)
Django Inlines附带基本内嵌类,您可以通过继承来创建自己的内嵌。
inlines.InlineBase
一个基类,用于提供简单的内嵌。唯一的必需覆盖是 render 方法。它应该返回一个字符串或至少可以强制转换为字符串的某种东西。
inlines.TemplateInline
一个基类,用于提供模板内嵌。唯一的必需覆盖是 get_context 方法。它应该返回类似字典的对象,该对象将被作为上下文传递到模板中。
如果您使用上下文实例实例化您的内嵌类,它将使用该实例设置基本上下文。
分配给您的内嵌的任何额外参数将直接传递到上下文中。
请参阅 samples.YoutubeInline 了解 TemplateInline 子类的示例。
模板内嵌渲染与它们注册的名称相同的模板。YouTube内嵌使用 inlines/youtube.html
inlines.ModelInline
Django模型内联的基类。只有 model 类属性是必须重写的。它应该被分配一个Django模型类。
一个示例模型内联
from myapp.models import Photo class PhotoInline(inlines.ModelInline): model = Photo inlines.registry.register('photo', PhotoInline)
使用方法
{{ photo 1 }}
ModelInlines使用对象的 id 作为其唯一值,并将该对象作为 object 传递到上下文中。
由于模型内联将被非常频繁地使用,因此有一个 inline_for_model 快捷方法。它可以用来直接注册模型为内联。
from django_inlines.inlines import inline_for_model inlines.registry.register('photo', inline_for_model(Photo))
内联语法
Django内联使用以下语法 {{ name[:variant] value [argument=value ...] }}
name
内联注册的名称。模板内联将其用作模板的基本名称。
value
任何字符串。这是内联类解析此字符串的要求。
variant 可选
变体可以由内联类用来改变行为。默认情况下,任何渲染模板的内联都会使用此来检查备用模板。 {{ youtube:hd <videourl> }} 会首先检查 inlines/youtube.hd.html,然后再检查 inlines/youtube.html。
arguments 可选
内联末尾可以允许任意数量的键=值对。这些将直接作为上下文变量传递到模板中。 {{ youtube:hd <videourl> width=400 height=200 }}
模板标签
在提供的内容中搜索并应用内联,将当前模板上下文传递到内联模板中。
语法
{% process_inlines entry.body [in template_dir] [as varname] }
示例
{% process_inlines entry.body %} {% process_inlines entry.body as body %} {% process_inlines entry.body in 'inlines/sidebar' %} {% process_inlines entry.body in 'inlines/sidebar' as body %}
如果给出了可选的 template_dir 参数,内联将首先在该目录中检查模板,然后再回退到 inlines/<inline_name>.html
如果给出了 [as varname],该标签不会返回任何内容,而是将 varname 填充到您的上下文中。然后您可以应用过滤器或测试输出。
设置
您可以在您的 settings.py 中覆盖一些设置。
INLINE_DEBUG = True:通常内联错误会静默失败。将其设置为 True 会引发内联可能产生的所有异常。默认: False
INLINES_START_TAG = '{{':内联语法中使用的开始标签。默认: '{{'
INLINES_END_TAG = '}}':内联语法中使用的结束标签。默认: '}}'
待办事项
警告: Django内联仍在开发中。这里的一切都已经过充分测试和功能化,但尚未保证稳定性。重要的部分尚不存在。这些包括
更好的文档。
在您的应用中自动发现 inlines.py 的管理风格。
向基类添加验证钩子。
添加一个模型字段和用于验证以及在管理中改进添加的部件。
更改
0.7.2
错误修复
参数现在工作正常(感谢Martin Mahner)。
修复了偶尔会导致传递值错误分割的正则表达式错误。
新增
START_TAG和END_TAG现在可以通过设置进行控制。
0.7.1
包含来自Jannis Leidel的修复,现在实际上可以在Pypi上工作。感谢Jannis!
0.7
首次公开发布
项目详情
django_inlines-0.7.4.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bea7983fa9139c5930143b58a205a200c5b702d2488b2c59aba644ddf6c9b675 |
|
MD5 | a2c7589ea2af8e7e352aa7206e7c8808 |
|
BLAKE2b-256 | 4a3b5c0b79331a21bdb3079cfd7f40a981185e13a39cfc14db35a5b4b6a7e1c0 |