简单,设计师友好的模板和A/B测试友好的Django工具。

django-simple-templates的Python项目详细描述


**生成状态:**[![构建状态](https://api.travis ci.org/jaddison/django simple templates.png)(https://travis ci.org/jaddison/django simple templates))



overview
----
,**django simple templates**提供了简单、设计友好的模板和A/B测试(拆分测试)友好的工具是Django的。我在www.chatterblock.com上工作时遇到了这两个问题(你应该去看看)。

它的灵感来源于"flatpages",希望减少对知识的依赖,提高灵活性。

请注意,这是一项正在进行的工作-请提供反馈!


使用django模板进行**a/b测试(分割测试)的一种快速而简单的方法**



用例
---
如果您需要快速启动营销活动的登录页,那么**django简单模板**适合您。

关于django,那么**django简单模板**可能是一个很好的匹配。它有助于减少对以下内容的需求:

-培训web设计师关于django url模式、视图等的知识-您可以将必要的知识限制在django模板和模板标记(自定义和/或内置)
-让web开发人员创建存根页面模板或转换设计器创建的从静态html页面到django模板

如果你想用gace(google analytics content experiments)这样的外部服务来**a/b测试任何django模板**,那么**django simple templates**绝对会对你有帮助。我总是发现用django(和一般的框架)进行a/b测试有点痛苦-希望这个应用程序也能减轻其他人的痛苦。



installation
----
它是一个标准的pypi安装:


GE模板功能,将"SimplePageFallbackMiddleware"添加到"settings.py"中的"Middleware"类中:

#这里还有其他中间件
"simple-templates.middleware.simplePageFallbackMiddleware"



请注意,如果您只想使用"get-ab-u-template"功能(见下文),则不需要此中间件。



mplates**有几个选项可以帮助满足您的项目需求。您可以通过在settings.py中设置它们来覆盖它们。每个都有一个可接受的默认值,因此您不需要*设置它们:

-**简单模板参数**:可选;默认值为"ab"。这是包含A/B测试模板名称的查询字符串(request.get)参数。
-**简单模板目录**:可选;默认为"AB模板"。这是模板目录中的子目录,您应该在其中放置A/B测试页模板。
-**简单模板目录**:可选;默认为"简单模板"。这是模板目录中的子目录,您应该在其中放置简单页面模板。



usage
---
要创建"简单模板"页面,您只需在"简单模板目录"下创建模板文件。这是标准的django模板格式、继承等。放置它的目录结构决定url结构。例如,在此处创建模板:

<;您的模板目录>;/简单模板/en/contact.html

m/en/contact/

.

要为上面的示例简单页面模板创建A/B测试模板(变体模板),您需要在"简单模板"下的相应目录结构下创建变体模板:

<;您的模板/AB模板/Simple模板/en/contact/variation1.html

,得到的url是:

http://www.example.com/en/contact/?a b=variation1

,这样您就可以看到a/b测试变体模板需要存在于一个目录结构中,该目录结构模拟原始模板的目录结构及其不带扩展名的文件名。

**特殊情况:**如果要为根"home"创建简单的页面模板在你的网站页面上,你给这个简单的模板起了一个特殊的名字`````uHomepage`.html``。URL和目录示例:

<;您的"模板目录";"简单模板"/"主页";.html


可在以下网址访问:

http://www.example.com/



<;您的模板目录>;/AB模板/简单模板/U主页/variation2.html

a b=variation2



在django视图中使用a/b测试
----
若要在现有代码中使用a/b测试功能,请导入"get-ab-u-template"并在视图中使用它:

从django。快捷方式从简单模板导入render
。utils import get-ab-u-template

def user_signup(request):
template=get_ab_template(request,'profiles/user/signup.html')
return render(request,template)

_ab-template`
-"get-ab-template"将在请求中查找。get查看查询字符串中是否有"ab"参数
-如果在请求中找到"ab",则"get-ab-template"将尝试在"simple-templates"ab-dir`
-如果"ab"模板文件是找到时,将返回"ab"模板路径
-如果找不到"ab"或与"ab"关联的模板文件,则返回传入的"默认"模板文件

下面是一个示例。如果您想a/b使用以下URL测试您的注册页:

http://www.example.com/user/signup/

t修改django视图,让注册用户使用"get_ab_template",并将此url作为变体页面:

http://www.example.com/user/signup/?ab=更少的输入

,您的变体模板文件应该放在这里:

<;您的_Templates_dir>;/ab_Templates/profiles/user/signup/less inputs.html



以防在搜索引擎眼中你没有创建重复的内容。什么是重复内容?几乎相同的两页。当你在做A/B测试时,你经常在一个主题上做一些小的变化——也许只有一个按钮的颜色。这些只是一个HTML元素,您可以将其放在变体模板页面的"head"部分,如下所示:

<;html>;
<;head>;
<;title>;My Variation网页<;/title>;
<;link rel="canonical"href="<;<;无论您的原始网页URL是什么>;">;
<;/head>;
<;body>;

<;/body>;
<;/html>;


页面url是>;gt;``在上面的示例中,应指向"规范的"页面url(不带'ab=variation name'参数);这意味着要由搜索引擎索引的原始页面url。这样,任何看到变体模板页面的搜索引擎都将"忽略"它,因为您要求它看到与原始页面相同的页面。但是你可以通过使用优秀的[django spul]应用程序(https://github.com/j4mie/django-spul"django spul")在base.html中进行此更改,使之更容易实现,比如:

<;html>;
<;head>;
<;title>;base.html模板<;title>;
<;link rel="canonical"ref="{%block head canonical%}{%spul base=request.get_full_path remove_query_param=%}{%endblock%}">;
<;/head>;
<;body>;

<;
<;
R模板(普通视图模板、简单模板和A/B模板)来自此base.html。"spul"模板标记只需删除"ab"参数,就可以在站点上的**每个页面**上为您创建规范链接,这样就可以轻松地进行拆分测试,而且不需要考虑任何问题。请注意,您需要在"settings.py"中将"django.core.context廑processors.request"添加到"template廑context廑processors"中,并安装[django spurl](https://github.com/j4mie/django-spurl"django spurl")才能正常工作。ce)
基于上面的示例,gace的简单集成遵循类似的策略-在base.html中有一个`<;head>;``块,在其中可以重写以放置gace javascript片段,如下所示:

<;html>;
<;head>;
{%block head gace js%}{%endblock%}
<;title>;base.html模板<;/title>;
<;link rel="canonical"ref="{%block head canonical%}{%spul base=request.get_full_path remove_query_param='ab'%}{%endblock%}">;
<;/head>;
<;body>;

<;/body>;
<;/html>;

然后,在要对其进行A/B测试的任何"原始"页中,重写要粘贴在GACE JS代码段中的"head gace js"块:

{%extends'base.html'%}

{锿!有关详细信息,请参阅gace帮助。#}
{%块头间隙js%}
…gace js代码片段在这里
{%endblock%}

…原始页面的内容块覆盖等

我对gace集成做了有限的测试,所以请报告您的结果!



运行单元测试
---
若要运行**django简单模板**测试,请执行以下步骤:

-克隆**django简单模板**存储库
-将目录更改为存储库
-初始化"virtualenv":`"virtualenv--分发"。```
-激活virtualenv:``源代码bin/activate`
-安装测试依赖项**django简单模板**:`` pip install-r test_project/test requirements.txt`
-运行测试:`` python test_project/manage.py test simple_templates`

测试已在下面运行:
-python 2.7.3和django 1.4.3
(请报告其他结果)



compatibility
---
**django simple templates**已用于以下版本配置:

-python 2.6、2.7
-django 1.4、1.5、1.6、1.7、1.9

e并根据需要提交请求。



source
----
最新的源代码总是可以在这里找到:http://github.com/jaddison/django simple templates/


credits
---
django simple templates由james addison维护,code@scottisheyes.com.



license
----
django simple templates是版权所有(c)2013年,詹姆斯·艾迪生。它是免费软件,可以根据许可文件中指定的条款重新分发。




问题、评论、关注点:
----
欢迎在此处打开问题:http://github.com/jaddison/django-simple-templates/issues/-或者更好的方式是,提交带有修复和IM的请求。证明。



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
带有嵌套JAR的java RCP ClassNotFoundException   java在输入框中设置默认值,crud应用程序使用spring   java如何在Heroku中使用fs创建新文件   java将JPanel放在JFrame中   java这个正则表达式会匹配“i.imgur.com/xxx”吗?   java在片段内创建RecylerView,而无需在Android中设置片段   Android上Groovy导致java错误的双精度浮点精度损失   swing Java查找JFrame属于JPanel的内容   java Spring junit自连线自定义类本身必须有构造函数吗?   java textswitcher支持前面的文本   从Android客户端到JAXRS的java Post自定义对象   java如何检索JSON数据并使用MPAndroidChart绘制折线图,以及在安卓上的改进   拒绝用户“root”@“localhost”的java c3p0访问(使用密码“是”)   使用Selenium Webdriver自动化ExtJS应用程序时java面临的问题