未知

django-dynamicwidgets的Python项目详细描述


django动态小部件是一个允许您定义html和公开 块,它将使用xhr请求加载到页面上。

你为什么要这样做,原因不多。最明显的是:

  • 缓存整个页面,同时仍在中显示hello**username** 右上角,
  • 仅在某些操作上加载内容-用户单击或悬停在某些操作上 元素

安装

确保正确设置了django.contrib.staticfiles并添加 dynamicwidgets到您安装的应用程序设置:

INSTALLED_APPS = (
    # ...
    'django.contrib.staticfiles',
    # ...
    'dynamicwidgets',
)

url配置

要自动发现小部件路由,必须导入所有处理程序。 这可以使用dynamicwidgets.handlers.default.autodiscover()来完成。之后 因此,您必须将handler视图放在url树的某个位置。好地方 可能是应用程序url.py文件:

from dynamicwidgets import handlers

handlers.default.autodiscover()

urlpatterns = patterns('',
    # ...
    url(r'^dynamicwidget/', include('dynamicwidgets.urls')),
)

javascript设置

动态小部件库使用javascript动态加载html块和 取决于jquery。

在将使用动态widges的页面上,包括jquery和dynamic Widges库:

{# include jQuery #}
<script src="{% static "dynamicwidgets/js/dynamicwidget.js" %}" type="text/javascript"></script>

此外,before包括上述库,最好在<;head>;标记中, 指定小部件视图的路径:

<script type="text/javascript">window.DYNAMIC_WIDGETS_URL = '{% url "dynamicwidgets.widgets" %}';</script>

用法

要使用小部件,必须定义将生成并返回 内容和HTML文档中要加载内容的标记。

小部件处理程序

widget handler是一个始终接受两个参数的函数-请求和 小部件列表。要定义处理程序,请用 动态widgets.decorators.widget\u处理程序

from articles.models import Article
from dynamicwidgets.decorators import widget_handler


@widget_handler(r'^user-name$')
def user_name(request, widgets):
    if request.user.is_anonymous():
        return {'user-name': {'html': 'anonymous'}}
    return {'user-name': {'html': request.user.username}}

每个处理程序都应该返回一个字典,其中键是小部件名称和 值是字典。如果值字典包含html键,则它是值 将在页面上呈现为小部件内容。

出于性能原因,所有小部件匹配都聚合在单个 请求和每个小部件处理程序只调用一次。因为 这样,您可以将一些查询保存到数据库:

@widget_handler(r'^article-details:(?P<art_id>\d+)$')
def article_details(request, widgets):
    articles = Article.objects.filter(
        id__in=[w.params.art_id for w in widgets])
    article_by_id = {art.id: art for art in articles}

    response = {}
    for widget in widgets:
        article = article_by_id[int(widget.params.art_id)]
        html = '<h1>article {}: {}</h1>'.format(article.id, article.title)
        response[widget.wid] = {'html': html}
    return response

每个小部件都包含两个属性:

  • 包含小部件名称的wid,由 视图用
  • 装饰
  • params保留从decorator的正则中提取的零个或多个参数 表达式

HTML属性

每当您想使用小部件时,请将dw属性添加到元素中。那些罐头 比利时:

  • dw load对于文档准备好后应该加载的小部件,
  • dw单击以获取应加载到上的小部件单击事件,
  • dw hover用于应加载到mouseover事件上的小部件。

使用它们非常简单:

<div class="header">
    <span class="userinfo" dw-load="user-name"></span>
</div>
<div class="content">
    <span class="article" dw-click="article:1">click to show article<span>
    <span class="article" dw-hover="article:2">hover to show article<span>
</div>

此外,您可以添加一次dw属性,以确保widget内容 只提取一次:

<span class="article" dw-hover="article:2" dw-once>hover to show article<span>

但仅仅替换内容可能还不够。这就是为什么吃饱了 属性值的格式可以使用多个块构建,这些块由 逗号字符:

dw-<action>="<widget name>,<insert method>,<destination selector>"
  • <;widget name>;用于匹配处理程序函数。这是唯一的要求 值字符串的一部分,
  • <;insert method>;是任何有效的jquery输入方法,如htmlappend前置。默认值为html
  • <;destination selector>;是一个额外的sizzle选择器。选择器 从@开始,字符总是缩小到dw的元素 属性已声明。默认值为@

了解以上所有内容,可以轻松制作带有动态内容加载的下拉菜单:

<style type="text/css">
    .dropdown-menu .menu-items       {display: none;}
    .dropdown-menu:hover .menu-items {display: block;}
</style>

<div class="dropdown-menu" dw-hover="article-attributes:3,html,@.menu-items" dw-once>
    Menu
    <span class="menu-items">
        Loading...
    </span>
</div>

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

推荐PyPI第三方库


热门话题
java Apache Flink外部Jar   创建和强制转换对象数组时发生java错误   Java,添加数组   具有相同包结构和类的java JAR   java Jenkins未能构建Maven项目   java为什么一个forloop比另一个更快,尽管它们做的“一样”?   servlets在将“/”站点迁移到Java EE包时处理contextpath引用   无法解析java MavReplugin:2.21或其某个依赖项   泛型如何编写比较器来泛化Java中的两种类型的对象?   java Android Emulator未在netbeans上加载   多线程Java使用线程对数组中的数字求和:在同步块中使用新变量作为锁:差异   java如何在JSP/servlet中设置<input>标记的值?