一个简单的Django应用,可以在您的网站上使用表情符号
项目描述
Emoji是将GitHub gem gemoji移植到Django的。
此应用有两个主要用途
它会尝试用表情符号替换 :: 之间的项,例如 : dog :(没有空格)将变成一只狗的表情符号(:dog:)。
它会尝试用表情符号替换Unicode字符,例如‘✌️’将变成胜利符号(:v:)。
版本2发布
感谢Tim Schilling,我们现在启用了与Django核心相同的逻辑的自动转义。由于这可能对该应用的用户造成破坏性更改,因此已增加主版本号。除了过滤器外,还增加了Django的标准XSS保护,没有其他更改。
要获取应用的旧行为,请将过滤器这样包装:
{% autoescape off %} {{ emoji|emoji_replace }} {% endautoescape %}
快速开始
从PyPi安装django-emoji <https://pypi.python.org/pypi/django-emoji>
pip install django-emoji
将“emoji”添加到您的INSTALLED_APPS设置中,如下所示
INSTALLED_APPS = ( ... 'emoji', )
如果您想获取emoji的JSON列表,请将emoji URLconf包含在项目urls.py中,如下所示
url(r'^emoji/', include('emoji.urls')),
访问http://127.0.0.1:8000/emoji/all.json以获取包含所有可用emoji的json对象
Python版本
支持Django 1.5、1.6、1.7、1.8和1.9及其各自的Python 2/3支持版本。
设置
以下是在您的settings.py中可以配置的设置
设置名称 |
描述 |
---|---|
EMOJI_IMG_TAG |
在将emoji转换为图片时用于创建<img>标签的模板字符串。默认值:<img src="{0}" alt="{1}" title="{2}" class="emoji"> |
EMOJI_ALT_AS_UNICODE |
是否将对应于emoji的unicode字符作为alt文本放入replace_unicode。默认值:True |
EMOJI_REPLACE_HTML_ENTITIES |
是否自动将HTML编码的unicode字符转换为emoji。默认值:True |
用法
API
Python
Python类Emoji是一个单例,实例化之间将返回相同的实例。加载Emoji时,它将所有emoji的名称及其unicode等效字符加载到内存中。
调用 |
描述 |
---|---|
Emoji.names() |
所有已知emoji的列表 |
Emoji.replace(replacement_string) |
替换所有::样式emoji |
Emoji.name_for(character) |
给定unicode字符的名称 |
Emoji.replace_unicode(replacement_string) |
替换所有已知unicode emoji |
Emoji.replace_html_entities(replacement_string) |
替换所有HTML编码的unicode字符 |
JavaScript
浏览器版本将所有emoji缓存到localStorage中,因此不需要多次往返服务器以获取emoji列表。
注意:依赖于jQuery或其他导出$.get的库。
调用 |
描述 |
---|---|
Emoji.setDataUrl(url) |
获取所有可用emoji列表的位置 |
Emoji.load() |
从服务器加载所有emoji |
Emoji.get(/*emoji*/) |
获取名为emoji的URL或返回所有已知emoji的名称 |
Emoji.replace(replacementString) |
将所有::样式emoji替换为图片 |
Emoji.clear() |
清空浏览器缓存 |
示例
通过在模板中加载标签使用Python模板替换emoji
{% load emoji_tags %} {{ blog_post.body|emoji_replace }} {{ blog_post.body|emoji_replace_unicode }} {{ blog_post.body|emoji_replace_html_entities }}
使用JavaScript替换emoji(例如,在用户保存他们所写内容之前显示预览)
{% load emoji_tags %} <script src="{% static 'emoji/js/emoji.js' %}"></script> {% emoji_load %} Emoji.get('dog') // => url stub to dog emoji or falsy Emoji.get() // => all emojis available Emoji.replace("It's raining :cats: and :dogs:.") // => It's raining <img src="..." alt="cats" class="emoji"> and <img src="..." alt="dogs" class="emoji">
emoji_load的作用是设置检索所有可用emoji列表的端点,因此仅在包含emoji URL时才有效。
它等效于执行以下操作
Emoji.setDataUrl('{% url 'emoji:list.json' %}').load();
它也作为模板占位符提供
{% include 'emoji/script.html' %}
从Python内部使用,其中Emoji类模拟了字典的一些行为
from emoji import Emoji Emoji['dog'] # => url stub to dog emoji or None 'dog' in Emoji # => True Emoji.keys() # => a list of all emojis by name Emoji.replace("It's raining :cats: and :dogs:") # => It's raining <img src="..." alt="cats" class="emoji"> and <img src="..." alt="dogs" class="emoji">
替换unicode emoji
Emoji具有从unicode字符获取emoji名称的能力。它还可以将字符串中emoji字符的每个实例替换为其图像替代品。
用法
>>> from emoji import Emoji >>> Emoji.name_for(u'\U000148b') kiss >>> Emoji.replace_unicode(u'I send a \U0001f48b!') I send a <img src="/static/emoji/img/kiss.png" alt="kiss" class="emoji">
注意:
为了最佳使用Unicode替换,请使用支持宽字符的Python构建版本。从版本1.2开始,添加了处理Unicode代理对的代码,它应该能在窄构建上很好地工作。但是,这尚未在生产环境中进行测试,因此请仔细尝试。请报告发现的任何错误。
要测试您是否安装了Python的窄或宽版本,请运行以下命令,如果您遇到异常,则表示您正在运行窄版本。
>>> print(unichr(0x0001f48b)) ValueError: unichr() arg not in range(0x10000) (narrow Python build)