用于处理模板中url的django帮助程序

django-url-tools的Python项目详细描述


一个用于处理模板中URL的Django帮助工具。内容:

概述
=



django url工具是上下文处理程序,以及帮助您处理模板中url操作的模板标记。这个繁重的工作是由
``url-tools.helper.urlhelper``类完成的,该类包装了``urllib``、
``urlparse``和django的``querydict``来提供解析和
操作url的便利。

``使用``easy_install``或
``pip``的包:


>配置django项目
=======================


要使用上下文处理器,请将以下内容添加到中间件堆栈::

template_context_processors=(
/>…
"url-tools.context-processors.current-url",



如果要使用模板标记,请将"url-tools"添加到已安装的应用::


installed-apps=(

"url-tools",


urlhelper类
=/>`` urlhelper``类实现了用于操作在该应用程序的其他部分中使用的url的所有方法。还可以通过从"helper"模块导入
直接使用该类::

from url-tools.helper import urlhelper

``urlhelper``构造函数只接受一个参数,即要操作的url的完整路径。虽然技术上我们可以让"urlhelper"处理完全绝对url,但我们选择只实现处理路径的方法。因此,如果您向urlhelper传递带有
方案、主机、端口和用户凭据的完整url,它仍将只使用路径、
查询参数和片段标识符。

如果需要,您还可以将"urlhelper"类的实例传递给构造函数。

类具有以下属性:

+``path`:不带查询字符串和片段标识符的url路径
+``fragment``:url片段标识符(不带磅字符`````````````````)
+``query dict``:``querydict``包含url查询参数的实例
+`query``:similar to``query-dict``但是在分配
+``query-string`:url的查询字符串
+``hash``:md5完整路径的hexdigest(包括查询参数)时也会执行更多操作


urlhelper.path
----

这是一个包含url路径的简单字符串属性。例如,在
url``/foo/bar中?baz=1 boo```,属性包含``/foo/bar``.

----


在url``/foo/bar中?baz=1 boo``,此
属性包含`'foo``。


urlhelper.query-dict
----


包含以
``django.http.request.querydict``实例形式从url解析的查询参数。您可以阅读有关query dict的django文档中的api的更多信息。

----


这是一个属性,读取时返回"urlhelper.query-dict",但在帮助普通字典或字符串时会覆盖它。例如:

u=urlhelper('/foo/bar')
u.query='foo=1&bar=2'
在分配字符串时使用与
查询属性相同的方法。但是,不能将字典
分配给此属性。:

u=urlhelper('/foo/bar')
u.query字符串='foo=1&;bar=2';这有效
u.query_string=dict(foo=1,bar=2)但这不会

----


>返回包含查询参数的完整路径的md5 hexdigest。这对于缓存和其他需要用不同查询参数区分相同路径的情况非常有用。:

u=urlhelper('/foo/bar')
u.query=dict(foo=1)url现在是'/foo/bar?foo=1'
u.hash返回"06f0a42bdd474f053fb1343165a31d42"

----------

此方法使用"querydict"的"urlencode()"方法返回查询字符串。传递给此方法的任何关键字参数都将转发到
``urlencode()``方法。目前,唯一的关键字参数是"safe",它指示该方法不转义指定的字符。


urlhelper.get_query_data()
--------

返回"urlhelper.query_dict"属性。此方法主要用于帮助自定义子类中"urlhelper.query"的行为,因为
getter调用此方法,而不是直接返回"query-dict"属性



urlhelper.update-query-data(**kwargs)
此方法接受任意数量的关键字参数,并更新
``urlhelper.query\u dict``实例。与python dictionary不同,每个
``querydict``键都可以有多个值,因此可以将多个值作为
python iterable传递,例如列表或元组。例如::

u=urlhelper('/foo')
u.update_query_data(bar=[1,2,3])
u.query_string_returns'bar=1&;bar=2&;bar=3'

此方法添加查询参数。顾名思义,它不会更新
现有键,而是为现有参数添加新值。这里有一个简单的例子:


u=urlhelper('/foo')
u.overload_params(bar=1)/foo?bar=1
u.过载参数(bar=2)/foo?bar=1&bar=2

它同时查找匹配的参数和值,并使用"urlhelper.overload_params"添加新参数。这里有一个简单的例子:


u=urlhelper('/foo')
u.toggle_params(bar=1)/foo?bar=1
u.toggle_params(bar=1,foo=2)/foo?foo=2
u.toggle_params(bar=1,bar=2)/foo?bar=1&bar=2&foo=2

---------

返回"urlhelper.path"属性。此方法用于帮助
自定义子类中的"urlhelper.get_full_path()"方法。除了
,它与使用"path"属性相同。

--------


返回带有查询字符串和片段标识符(如果有的话)的完整路径。传递给此函数的
关键字参数将传递给
``urlhelper.get_query_string()``方法,并因此传递给
``querydict.urlencode()``方法。


urlhelper.get_full_quoted_path(**kwargs)
--------

_ path()``方法,但返回引用的完整路径
,以便可以将其用作url参数值。

=--


删除单个查询参数。::

u=urlhelper('/foo?bar=1&baz=2')
u.del_param('baz')
u.get_full_path();返回'/foo?bar=1'

urlhelper.del_params(*params,**kwargs)
-----------------------------


删除多个参数。如果未指定任何参数,则删除所有
参数。您还可以将一组键值对指定给删除具有指定值的特定
参数。这里有几个例子:

u.del_params('foo',bar')
u.get_full_path()返回'/foo?baz=2'

u=urlhelper('/foo?bar=1&baz=2&foo=3')
u.del_params()
u.get_full_path();返回'/foo'

u=urlhelper('/foo?bar=1&bar=2')
u.del_params(bar=2)
u.get_full_path();返回'/foo?bar=1'

=====


current戋url
--


`current戋url``上下文处理器将向模板的
上下文添加一个新变量。这个变量称为"current_url",它是一个"urlhelper"
实例。因此,该变量具有
``urlhelper``类的所有属性和方法。例如,如果我们当前在`/foo/bar上?baz=1`
路径,可以在模板中执行以下操作:

{{{current{url.query{string}{renders`baz=1`}
{{{current{url.get{path}{renders`/foo/bar`}

变量本身呈现为具有查询字符串
和片段标识符(与"urlhelper.get_full_path()``
方法的输出相同)的完整相对路径。


ATE标记,这是一个赋值标记。

{%add_params%}
----


此模板标记输出一个路径,其中查询字符串参数作为关键字
参数给定。例如,如果我们在`/foo``的页面上,我们可以使用以下标记::

{%add_params request.get_full_path foo=%bar%}


,输出将是::

/foo?foo=bar

现有的url参数被指定为keyword
参数的参数覆盖。

{%overload\u params%}
----

类似于`{%add\u params%}`标记,只是它不更新现有的
参数,而是用新值重载它们。例如,如果我们在``/foo的
页上?bar=1``,我们可以这样使用这个标记::

{%overload_params request.get_full_path bar=2%}

,输出是::

/foo?bar=1&bar=2

{%del_params%}
---------

如果使用关键字参数,则只会删除指定的名称-值对。

例如,如果我们在`/foo上?bar=1&bar=2&baz=2``url::

{%del_param request.get_full_path'bar'%}

>输出::

/foo?baz=2

和::

{%del_params request.get_full_path%}


outputs::

/foo


finally::

{%del_params request.get_full_path bar=2%}

outputs::

/foo?bar=1&baz=2

{%toggle_params%}
---------

此标记添加或删除参数,具体取决于参数和值是否存在。例如,如果我们在`/foo的页面上?bar=1``,我们可以使用::

{%toggle参数请求来切换``bar=1``的状态。获取`完整路径bar=1%}

,输出为::

/foo


bar=1

可以使用多个参数和值。例如,在
```/foo的页面上?bar=1&foo=2`,参数可以这样切换::

{%toggle_params request.get_full_path bar=3 foo=2 foo=3%}

to give::

/foo?bar=1&bar=3&foo=3

{%url_params%}
----


此标记用作赋值标记。它的第一个参数是url,后跟表示url参数的任意数量的关键字参数。对于
示例,如果我们正在请求"路径"上的页,并执行以下操作:

{%url参数请求。将"完整路径foo="bar"作为新的"url%"

foo=bar``url。要在配置的url中使用此项,可以使用内置的url标记:


{%url'foo'作为foo'u url%}
{%url arams foo'u url foo'bar'作为foo'u url%}

''/fo?foo=bar'`.


此标记将重写现有参数,而不是为
现有关键字添加新值。因此,您可以安全地使用它来设置url参数
,不管它们是否存在。当您为寻呼机之类的控件构建url
时,这通常很有用。无论是否存在"page"参数
,使用"url参数"标记将参数设置为所需值:

{%url参数current URL page=2%}
{this works for both`/foo?page=1``并且只有``/foo``}


要使用它们,首先需要加载"url"库::

{%load urls%}

----

它接受可选的安全字符
,可用于防止引用某些字符。此筛选器使用
"urllib.quote"进行报价。默认情况下,安全字符只包含斜杠"`/`"。用法:

{value{quote:"~/"}


quote-plus
——


``quote-plus``筛选器与'quote``筛选器类似,只是它将所有空格转换为'`+`'。此筛选器还具有可选的safe
字符。筛选器使用"urllib.quote\u plus"进行引用。用法:

{value{quote_u plus}


reporting bugs
==


请向我们的Bitbucket"问题跟踪者"报告任何错误。


contributors
==


d对
`` del_params``的改进,以及与django 1.4.x的兼容性。

_关于querydict的django文档:https://docs.djangoproject.com/en/dev/ref/request-response/?from=olddocs\querydict对象
…_问题跟踪器:https://bitbucket.org/monwara/django url tools/issues
…_ urllib.quote:http://docs.python.org/2/library/urllib.html 35; urllib.quote
。_ urllib.quote嫒plus:http://docs.python.org/2/library/urllib.html嫒urllib.quote嫒plus
。_ nlaurance:https://bitbucket.org/nlaurance

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

推荐PyPI第三方库


热门话题
java JList侦听器找不到符号   多点触摸跨平台java应用程序(Windows、Mac和Linux(Ubuntu)(可能是Android))   在UnitTest中找不到java类加载器资源   java当我尝试在Eclipse中运行我的minecraft mod时,我总是遇到这个错误,这是什么意思?   内部有一个同步块的静态方法,在java中阻止整个类?   不支持java操作:具有BillableStatus的费用在采购中应具有AccountBasedExpenseLineDetail行的CustomerRef   java运行时常量池GC集合   java无法解析配置“:app:\u debugApk”的所有依赖项。找不到名为“default”的配置   在GCP计算引擎中托管Neo4j的java   java如何从BroadcastReceiver更新片段选项卡?   线程“main”组织中的java异常。冬眠注释异常:@org。冬眠注释。表引用未知表:ProductForPractice   在Java/Groovy中嵌入处理   java Android REST教程/示例项目   java我可以在同一测试中在一个模拟器上启动应用程序,在另一个模拟器上启动移动浏览器吗?   java如何更改通知横幅的方向?   安卓 Java帮助实现Firebase授权   if else之后的rs.next()中出现java错误?