每当我学习一门新语言/框架时,我总会建立一个内容管理系统......
我正在学习Python和Django,我一直在制作一个能够选择正确页面的URL模式.
例如,对于单级URL模式,我有:
url(r'^(?P<segment>[-\w]+)/$', views.page_by_slug, name='pg_slug'),
Run Code Online (Sandbox Code Playgroud)
哪个适合网址,如:
http://localhost:8000/page/
Run Code Online (Sandbox Code Playgroud)
现在,我不确定是否可以让Django的URL系统返回一个slu a ala列表:
http://localhost:8000/parent/child/grandchild/
Run Code Online (Sandbox Code Playgroud)
将返回父母,孩子,孙子.
这就是Django已经做过的事情了吗?或者我是否修改原始URL模式以允许斜杠并在那里提取URL数据?
我在这里先向您的帮助表示感谢.
有没有办法可以访问自定义上下文处理器中视图传递的当前上下文,这样我可以添加缺少的变量,如果我想要而不是覆盖现有变量?
我想要实现的目标:
我建我的网址是这样的/ city_slug /我要检查,如果城市变量在上下文中已经存在,否则我想城市添加到我的上下文(可使用存储在会话变量中最后使用的城市,否则默认一些城市,可能甚至设置会话变量以供下次使用.)
我觉得这是很常见的问题,你们怎么解决呢?
我正在尝试使用url模板标记:
{% url all-labs-map %}
Run Code Online (Sandbox Code Playgroud)
但是当我查看页面时,我收到此错误:
Caught NoReverseMatch while rendering: Reverse for 'all-labs-map' with arguments '()' and keyword arguments '{}' not found.
Run Code Online (Sandbox Code Playgroud)
当我像这样使用模板标签时:
{% url gmaps.views.all_labs %}
Run Code Online (Sandbox Code Playgroud)
它工作得很好.
这是URL conf:
urlpatterns = patterns('gmaps.views',
url(r'^lab_list/$', 'all_labs', name="all-labs-map" ),
)
Run Code Online (Sandbox Code Playgroud)
我尝试使用django shell来查看命名URL是否存在问题,但是使用了
reverse('all-labs-map')
Run Code Online (Sandbox Code Playgroud)
返回正确的URL.
关于发生了什么的任何想法?
谢谢!
迈季
编辑:
我在ubuntu上使用django 1.2与nginx服务器和gunicorn和virtualenv.我在使用库加载的自定义标记时遇到了另一个问题,但即使我使用了正确的标记注册语法,也无法识别标记本身.任何想法将非常感谢!
我有一个带有optionnal参数的url:
urlpatterns = patterns(
'my_app.views',
url('schedule/(?P<calendar_id>\d+)/(?:month(?P<relative_month>[\+,\-]\d)/)$',
'attribute_event',name='attribute_event')
)
Run Code Online (Sandbox Code Playgroud)
在我的模板中,我有一个链接:
{% url attribute_event calendar.id %}
Run Code Online (Sandbox Code Playgroud)
但我有一个错误,说这些arg不能反转url.我必须使用2个url正则表达式和url名称吗?!
启用管理员界面并启动开发Web服务器(例如128.0.0.1:8000)后,我可以访问管理界面
128.0.0.1:8000/admin.
Run Code Online (Sandbox Code Playgroud)
显然是由于以下URL命名空间
url(r'^admin/', include(admin.site.urls)).
Run Code Online (Sandbox Code Playgroud)
我有什么要自动将128.0.0.1:8000/上的请求重定向到128.0.0.1:8000/admin?
URL命名空间
url(r'^$/', include(admin.site.urls))
Run Code Online (Sandbox Code Playgroud)
似乎不是解决方案.
我目前有一个DetailView用于Django的内置功能User.
url(
r'^users/(?P<pk>\d+)/$',
DetailView.as_view(
model = User,
template_name = 'doors/users/detail.html'
),
name = 'users_detail'
)
Run Code Online (Sandbox Code Playgroud)
但是当我user在模板中访问时,它会显示当前登录的用户,而不是具有pk我传递的用户DetailUser.我是否需要告诉DetailUser将user变量重命名为其他内容?如果是这样,我该怎么做?
我使用Django和Django REST框架作为后端,AngularJS作为前端.
对于用户管理,我使用的是django-rest-auth,它使用django-allauth进行用户管理.作为基础,我使用了django-rest-auth的demo.
问题出在注册后,当您尝试验证通过激活网址发送电子邮件的电子邮件时: 127.0.0.1:8000/account/confirm-email/yhca8kmijle0ia7k3p7ztbvnd2n1xepn9kyeuaycmlzll5xw19ubjarnvjrot7eu/
其中*127.0.0.1:8000是Django后端.
但在我的情况下,它应该发送类似的URL localhost:9000/#/verifyEmail/akv2dcvrfnk9ex5fho9jk0xx1ggtpfazmi8sfsoi2sbscoezywfp7kzcyqnizrc0.所以这个验证将从前端完成,localhost:9000我的AngularJS前端在哪里.
有没有办法在django-allauth上定制activate_url?
django django-urls angularjs django-rest-framework django-allauth
所以我正在构建一个Django渐进式Web应用程序,使用服务工作者提供离线支持.
根据谷歌的文档,sw.js文件应该是应用程序URL的根目录:
您需要执行此操作,因为服务工作者的范围(ServiceWorker将加载的URL集)由其所在的目录定义.
目前,我正在从http://example.com/static/文件夹中提供所有静态资源.但我需要在以下网址上提供此特定文件:http://example.com/sw.js.
知道我怎么能做到这一点?我可以制定一个特定的nginx规则来执行此重定向,但我不知道这是否是最干净的方法.也许这个设置应该存在于urls.py中?
注意:我已经看到这个问题建议使用static()方法django.conf.urls.static.但是django的文档说静态方法仅供开发使用,对我不利.
注意(2):我想我可以更改STATIC_URL设置,但我对从/ static目录提供的文件感到满意.我只希望这个文件位于url的根目录下.
我无法理解以下警告。我有一个名为“v1”的命名空间,我使用这些命名空间来确定 API 中的版本控制(使用 django Rest 框架)。所以,我有这样的路径:
/v1/accounts/me
/v1/listings
Run Code Online (Sandbox Code Playgroud)
这是 URL 配置 (project/urls.py):
urlpatterns = [
path('admin/', admin.site.urls),
path('v1/accounts/', include('accounts.urls', namespace='v1')),
path('v1/listings/', include('listings.urls', namespace='v1'))
]
Run Code Online (Sandbox Code Playgroud)
账户/urls.py
app_name = 'accounts'
urlpatterns = [
url(r'^token/$', views.obtain_auth_token, name='obtain_token'),
url(r'^me/$', my_account, name='my_account'),
]
Run Code Online (Sandbox Code Playgroud)
清单/urls.py
app_name = 'listings'
urlpatterns = [
path('', recent_listings, name='recent_listings')
]
Run Code Online (Sandbox Code Playgroud)
一切都按预期进行。所有网址均已发送。版本控制有效。但是,我不断收到以下错误:
?: (urls.W005) URL 命名空间“v1”不是唯一的。您可能无法反转此命名空间中的所有 URL
我知道这是一个警告,我也许可以抑制它;但是,我想了解为什么会发生这种情况。根据我的 URLconf 和此警告,似乎不能有多个命名空间路径作为“兄弟”。它们需要是一个命名空间路径的子级(例如“v1”)。如果我的理解是正确的,我应该如何创建这个 URL 配置。
我目前正在使用以下函数来获取参考视图:
def get_referer_view(request, default=None):
referer = request.META.get('HTTP_REFERER')
if not referer:
return default
# remove the protocol and split the url at the slashes
referer = re.sub('^https?:\/\/', '', referer).split('/')
if referer[0] != request.META.get('SERVER_NAME'):
return default
# add the slash at the relative path's view and finished
referer = u'/' + u'/'.join(referer[1:])
return referer
Run Code Online (Sandbox Code Playgroud)
如果我view由于编程逻辑而重定向,例如..
return HttpResponseRedirect('dashboard')
Run Code Online (Sandbox Code Playgroud)
...有没有一种方法可以在不使用的情况下获取引用视图,HTTP_REFERER以便我可以在重定向中使用该变量view?这并不总是在浏览器的标头中设置。
请注意,因为视图是按语法重定向的,所以我无法使用 POST 来收集数据。
也许可以以某种方式设置和检索自定义标头?