Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从Django中的URL获取变量中的两个字符串_Python_Django_Url - Fatal编程技术网

Python 从Django中的URL获取变量中的两个字符串

Python 从Django中的URL获取变量中的两个字符串,python,django,url,Python,Django,Url,向视图发送多个变量时遇到问题 我的URL.py如下所示: urlpatterns = patterns('', url(r'^rss/(?P<anything>[^/]+)/$', 'rss.rssama.views.makerss', name='anything'), url(r'^$', 'rss.rssama.views.home'), ) 因此,现在它从www.mydomain.com/rss/[anything]/获取并向我的视图发送“anyth

向视图发送多个变量时遇到问题

我的URL.py如下所示:

urlpatterns = patterns('',
    url(r'^rss/(?P<anything>[^/]+)/$', 'rss.rssama.views.makerss', name='anything'),
    url(r'^$', 'rss.rssama.views.home'),    
)
因此,现在它从www.mydomain.com/rss/[anything]/获取并向我的视图发送“anything”。但是,我还希望它将另一个字符串发送到views.py,如:

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

我试过这个,但没用:

url(r'^rss/(?P<anynumber>[^/]+)/(?P<anystring>[^/]+)/$', 'rss.rssama.views.makerss', name='anynumber', name2='anystring'),
url(r'^rss/(?P[^/]+)/(?P[^/]+)/$),'rss.rssama.views.makerss',name='anynumber',name2='anystring'),
但这不起作用,它给出了一个错误:关键字参数重复(url.py,第17行)


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

您不需要为此提供两个名称参数。我的意思是,在正则表达式中已经有了变量名。实际问题是,您不能提供两个名称参数,因此可以改为:

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

name2
应该是什么?
url
函数接受一个
name
参数,该参数是您反转url时的url名称,但您不能放置随机的额外函数


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

首先,正则表达式部分应该如下所示:

r'^/rss/(?P<anynumber>\d+)/(?P<anystring>.+)/$'
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
通过提供参数的默认值,它允许您以不同的方式使用相同的函数。在这种情况下,当您只想传递
anystring
的值,或者
anystring
anynumber
应该有值时,可以使用该函数

我知道这有很多不同的观点,所以我会尝试把它们放在一起,这样你就可以看到它是如何工作的。要有两个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'),    
)
请让我知道这是否有帮助。还有,Django岩石,太棒了


那么如何在视图中访问这两个变量呢?我现在得到错误:函数。。。当我使用[0]获取anynumber内容时,得到一个意外的关键字参数“anynumber”。什么?你真的需要阅读文档。”有些东西没有传递给视图,“anynumber”和“anystring”是。Kevin,非常感谢您的详细解释!真的很感谢你花了这么多时间来彻底解释事情!现在它就像一个符咒!p、 在考虑了很长一段时间要学习什么(PHP和一些框架或Django,我有基本的PHP技能和python技能)之后,我决定使用Django,因为我非常喜欢python。虽然一开始你得学很多东西,但到目前为止我真的很喜欢!不客气。我很乐意尽我最大的努力回答你提出的任何问题。
def makerss(request, anystring=None, anynumber=None):
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