English 中文(简体)
从Django中的URL获取变量中的两个字符串
原标题:Getting two strings in variable from URL in Django

我在向视图发送多个变量时遇到了一些问题。

我的urls.py如下:

urlpatterns = patterns(  ,
    url(r ^rss/(?P<anything>[^/]+)/$ ,  rss.rssama.views.makerss , name= anything ),
    url(r ^$ ,  rss.rssama.views.home ),    
)

视图.py

def maakrss(request, anything):

因此,现在它从www.mydomain.com/rss/[anything]/获取并将任何内容发送到我的视图中。然而,我也希望它与另一个字符串一起发送到views.py,比如:

www.mydomain.com/rss/[anynumber]/[anystring]/

我试过这个,但没用:

url(r ^rss/(?P<anynumber>[^/]+)/(?P<anystring>[^/]+)/$ ,  rss.rssama.views.makerss , name= anynumber , name2= anystring ),

但这不起作用,它给出了以下错误:关键字参数重复(urls.py,第17行)

所以我的问题是:我如何才能从url中提供两个字符串

最佳回答

首先,regex部分应该如下所示:

r ^/rss/(?P<anynumber>d+)/(?P<anystring>.+)/$ 

<;…中的那些字符串>部分允许您为正则表达式匹配的任何内容指定名称。Django将使用该名称将值传递给您的函数。因此,函数必须有一个同名的参数。在这种情况下,Django将获取名为anynumber的值,并将该值用于名为anynumber的函数的参数。anystring也是如此,这个系统让您不用担心函数的参数顺序。

d+将匹配一个或多个数字字符(数字)。如果您想要捕获的是正则表达式,那么最好将正则表达式限制为只匹配数字,而不是任何字符,并希望只显示数字。如果您想将数字部分限制为一定数量的数字,可以使用d{1,4}从一位数字到四位数字。

下一部分(?P<;anystring>;.+)将捕获由一个或多个任意字符组成的字符串。这实际上会匹配类似letters/moreletters的内容,包括斜杠。Python正则表达式中有许多“特殊序列”可能会有所帮助。要只匹配数字、字母和下划线,请使用w,如在(?P<;anystring>;w+)中所示。为了更宽松但忽略空白或任何其他无意义的字符,(?P<;anystring>;[a-zA-Z1-9:;_{}[])可以捕获大量字符。确保转义正则表达式中可能是特殊字符的任何字符。但是,要保守。如果你允许太多选项,谁知道你以后必须解决什么样的错误。

现在转到<code>url</code>函数的name参数。该名称不是它将捕获的模式传递给函数的名称。它是视图函数的特定调用类的名称,可以在其他上下文中用作简写,如模板标记{%url视图名称arg1 arg2%}。因此,您已经拥有的名称“anything”指的是对视图函数的调用,并向其传递一个恰好被称为anything的关键字参数。对于要传递两个字符串的情况,请为其指定一个类似“rss数字字符串”的名称,以表示要采用的参数,或者指定一个引用视图将使用该组合执行的特殊函数的名称。

我总是为同一个函数使用多个名称,关键是:

def makerss(request, anystring=None, anynumber=None):

通过给参数提供默认值,它允许您以不同的方式使用相同的函数。在这种情况下,当您只想传递anystring的值时,或者当anystringanynumber应该有值时,可以使用该函数。

我知道这有很多不同的地方,所以我会把它们放在一起,这样你就可以看到它是如何工作的。要有两个url,一个捕获字符串并将其传递,另一个捕获数字、斜杠,然后是字符串,但都指向同一个视图函数,可以使用以下方法:

urlpatterns = patterns(  ,
    url(r ^rss/(?P<anystring>w+)/$ ,  rss.rssama.views.makerss , name= rss-anystring ),
    url(r ^rss/(?P<anynumber>d+)/(?P<anystring>w+)/$ ,  rss.rssama.views.makerss , name= rss-number-string ),
    url(r ^$ ,  rss.rssama.views.home ),    
)

使用类似以下的视图函数:

def makerss(request, anystring=None, anynumber=None):
    if anystring:
        if anynumber:
            #Do something with the string and the number
        else:
            #Do something with just the string

如果这有帮助,请告诉我。此外,姜戈摇滚,太棒了!

Python Regex库文档

问题回答

你真的不需要给出两个名字的论据。我的意思是,正则表达式中已经有了变量名。实际的问题是,您不能给出两个名称参数,所以您可以这样做:

url(r ^rss/(?P<anynumber>[^/]+)/(?P<anystring>[^/]+)/$ ,  rss.rssama.views.makerss ,name= something ),

编辑:

使用上面的urlConf,您可以创建相应的视图,如下所示:

def makerss(request, anynumber, anystring):

name2应该是什么?url函数采用name参数,该参数是反转url时的url名称,但不能放置随机的额外函数。

否则,您就有了将两个元素发送到视图的正确语法。当然,由于您屏蔽了变量名,而没有提供实际的错误或追溯,我们无法知道真正出了什么问题。





相关问题
Can Django models use MySQL functions?

Is there a way to force Django models to pass a field to a MySQL function every time the model data is read or loaded? To clarify what I mean in SQL, I want the Django model to produce something like ...

An enterprise scheduler for python (like quartz)

I am looking for an enterprise tasks scheduler for python, like quartz is for Java. Requirements: Persistent: if the process restarts or the machine restarts, then all the jobs must stay there and ...

How to remove unique, then duplicate dictionaries in a list?

Given the following list that contains some duplicate and some unique dictionaries, what is the best method to remove unique dictionaries first, then reduce the duplicate dictionaries to single ...

What is suggested seed value to use with random.seed()?

Simple enough question: I m using python random module to generate random integers. I want to know what is the suggested value to use with the random.seed() function? Currently I am letting this ...

How can I make the PyDev editor selectively ignore errors?

I m using PyDev under Eclipse to write some Jython code. I ve got numerous instances where I need to do something like this: import com.work.project.component.client.Interface.ISubInterface as ...

How do I profile `paster serve` s startup time?

Python s paster serve app.ini is taking longer than I would like to be ready for the first request. I know how to profile requests with middleware, but how do I profile the initialization time? I ...

Pragmatically adding give-aways/freebies to an online store

Our business currently has an online store and recently we ve been offering free specials to our customers. Right now, we simply display the special and give the buyer a notice stating we will add the ...

Converting Dictionary to List? [duplicate]

I m trying to convert a Python dictionary into a Python list, in order to perform some calculations. #My dictionary dict = {} dict[ Capital ]="London" dict[ Food ]="Fish&Chips" dict[ 2012 ]="...