我必须根据当前的url动态构建一个url.使用{% url %}标记是最简单的方法,但我需要当前的url名称来动态生成新的标记.
如何将url名称附加到导致当前视图的urlconf?
编辑:我知道我可以手动手工使用网址,get_absolute_url但我宁愿避免它,因为它是一个讲座的一部分,我想只展示一种建立网址的方法.
学生知道如何使用{% url %}.当他们必须基于当前的URL生成更完整的URL时,他们知道面临问题.最简单的方法是{% url %}再次使用,有一些变化.由于我们已经命名了url,因此我们需要知道如何获取调用当前视图的url的名称.
编辑2:另一个用例是根据基本模板不同地显示基本模板的部分.还有其他方法可以做到这一点(使用CSS和{%block%},但有时如果视图名与链接匹配,则能够删除base.html菜单项的标记.
我在两台独立的计算机上安装了两个应用程序.在计算机A上,在urls.py文件中我有如下行:
(r'^cast/$', 'mySite.simulate.views.cast')
Run Code Online (Sandbox Code Playgroud)
该网址将会对工作都mySite.com/cast/和mySite.com/cast.但是在计算机上有一个类似的URL写出来像:
(r'^login/$', 'mySite.myUser.views.login')
Run Code Online (Sandbox Code Playgroud)
出于某种原因,在计算机B上url mySite.com/login/将会工作但是mySite.com/login会挂起并且不会mySite.com/login/像计算机A那样直接返回.是否有我遗漏的东西?这两个url.py文件看起来都和我一样.
在django视图等中,您可以访问request.GET ['variablename'],因此在您的视图中,您可以返回执行以下操作:
myvar = request.GET['myvar']
Run Code Online (Sandbox Code Playgroud)
实际的request.GET ['myvar']对象类型是:
<class 'django.http.QueryDict'>
Run Code Online (Sandbox Code Playgroud)
现在,如果你想为同一参数名传递多个变量,即
http://example.com/blah/?myvar=123&myvar=567
换句话说,您希望为参数myvar返回一个python 列表
基本上我想做的就是这样
for var in request.GET['myvar']:
print(var)
Run Code Online (Sandbox Code Playgroud)
但是,当您尝试这样时,您只获得在url中传递的最后一个值,即在上面的示例中,您将得到567
shell中的结果将是:
5
6
7
Run Code Online (Sandbox Code Playgroud)
但是,当你打印request.GET它似乎有一个列表,即:
<QueryDict: {u'myvar': [u'123', u'567']}>
Run Code Online (Sandbox Code Playgroud)
好的更新:它的目的是返回最后一个值,我的用例是我需要一个列表.
来自django docs:
的QueryDict.getitem(key)返回给定键的值.如果键具有多个值,则 getitem()将返回最后一个值.如果密钥不存在,则引发django.utils.datastructures.MultiValueDictKeyError.(这是Python标准KeyError的子类,因此您可以坚持捕获KeyError
QueryDict.getlist(key)以Python列表的形式返回带有请求键的数据.如果密钥不存在,则返回空列表.它保证返回某种列表.
更新:如果有人知道为什么django dev已经这样做了,请让我知道,显示一个列表似乎反直觉,它不像一个.不是pythonic!
我在google上看了很多关于如何在模板中使用'url'标签的答案,但却发现很多回复说'你只需将它插入模板并将其指向你想要的网址'.对我来说没有任何乐趣:(我已尽力尝试每一种排列,并在此作为最后手段使用.
所以这就是.我的urls.py看起来像这样:
from django.conf.urls.defaults import *
from login.views import *
from mainapp.views import *
import settings
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Example:
# (r'^weclaim/', include('weclaim.foo.urls')),
(r'^login/', login_view),
(r'^logout/', logout_view),
('^$', main_view),
# Uncomment the admin/doc line below and add 'django.contrib.admindocs'
# to INSTALLED_APPS to enable admin documentation:
# (r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
(r'^admin/', include(admin.site.urls)),
#(r'^static/(?P<path>.*)$', 'django.views.static.serve',{'document_root': '/home/arthur/Software/django/weclaim/templates/static'}),
(r'^static/(?P<path>.*)$', 'django.views.static.serve',{'document_root': …Run Code Online (Sandbox Code Playgroud) 有没有办法在Django模板中获取当前页面URL及其所有参数?
例如,一个可以打印完整URL的模板标签 /foo/bar?param=1&baz=2
我是django的新手,但在使用不同框架的Python和java web编程方面经验丰富.我已经把自己变成了一个不错的小django应用程序,但我似乎无法使它与www.mysite.com匹配而不是www.mysite.com/myapp.
我在urls.conf中定义了网址和视图,这些网址目前没有与应用程序分离(不介意).
urlpatterns = patterns('myapp.views',
(r'^myapp/$', 'index'),
(r'^myapp/(?P<some_id>\d+)/global_stats/$', 'global_stats'),
(r'^myapp/(?P<some_id>\d+)/player/(?P<player_id>\d+)/$', 'player_stats'),
)
Run Code Online (Sandbox Code Playgroud)
所有这一切都像一个魅力.如果有人访问www.mysite.com/myapp,他们将点击我的索引视图,这会导致http重定向到我的"正确"默认网址.
那么,我怎样才能添加一个与(r'^ myapp/$','index')相同但不使用/ myapp的模式 - 也就是说,www.mysite.com就足够了?
我认为这将是非常基本的东西......我尝试添加如下行:
(r'^$', 'index'),
Run Code Online (Sandbox Code Playgroud)
然而这让我陷入了困境......
希望你在那里的django大师可以为我澄清这个!
我有一个验证和保存表单的视图.保存表单后,我想重定向到list_object视图,并显示成功消息"客户xyz表单已成功更新..."
HttpResponseRedirect似乎不会起作用,因为它只有一个url参数,无法用它传递字典.
我已经尝试修改object_list的包装器,将dict作为具有必要上下文的参数.我从保存表单的视图内部返回对此包装器的调用.但是,在呈现页面时,url为'/ customer_form /'而不是'/ list_customers /'.我尝试修改请求对象,然后将其传递给object_list包装器,但这不起作用.
谢谢.
可以在重定向中添加GET变量吗?(无需修改我的urls.py)
如果我做 redirect('url-name', x)
我明白了 HttpResponseRedirect('/my_long_url/%s/', x)
我没有抱怨使用HttpResponseRedirect('/my_long_url/%s/?q=something', x),但只是想知道......
非常基本的问题,但我无法在网上追踪答案.我有一个模板,我想链接到django管理站点(即localhost:8000/admin).这是什么代码?
我在想象类似的东西
<a href="{% url admin.site.root %}">link to admin panel</a>
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试上面的代码片段时,我得到:
Caught an exception while rendering:
Reverse for 'project_name.django.contrib.admin.sites.root' with
arguments '()' and keyword arguments '{}' not found.
Run Code Online (Sandbox Code Playgroud)
救命?
你有一个URL接受first_name和last_nameDjango:
('^(?P<first_name>[a-zA-Z]+)/(?P<last_name>[a-zA-Z]+)/$','some_method'),
Run Code Online (Sandbox Code Playgroud)
如何在title不创建任何新行的情况下包含可选URL令牌.我的意思是,在一个理想的情况下:
#A regex constant
OP_REGEX = r'THIS IS OPTIONAL<title>[a-z]'
#Ideal URL
('^(?P<first_name>[a-zA-Z]+)/(?P<last_name>[a-zA-Z]+)/OP_REGEX/$','some_method'),
Run Code Online (Sandbox Code Playgroud)
如果没有创建新线,这是否可行
('^(?P<first_name>[a-zA-Z]+)/(?P<last_name>[a-zA-Z]+)/(?P<title>[a-zA-Z]+)/$','some_method'),
Run Code Online (Sandbox Code Playgroud) django ×10
django-urls ×10
django-views ×2
django-admin ×1
python ×1
redirect ×1
regex ×1
url ×1
urlconf ×1