Python 从Django中的URL获取变量中的两个字符串
向视图发送多个变量时遇到问题 我的URL.py如下所示: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
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