如果我想拥有名为app1的django应用程序,它可以让用户将帖子发送到某人的页面和他/她自己的页面。 如果用户已登录,则无需在URL中使用用户名,但url中的username参数可以充当urlconf中的父对象。
说清楚:
urls.py
urlpatterns = patterns(''
#if registered user/anonymous user visit someone's page
url(r'^/foo/users/(?P<username>\w+)/app1/',include('app1.urls', namespace='myapp1')),
#if user is logged in in his own page
url(r'^app1/', include('app1.urls', namespace='myapp1')),
...
)
APP1 / urls.py
urlpatterns = patterns('',
# I expect this pattern receives the username parameter from above
url(r'^note/add/$', app1_views.add_note,
name='add_note'),
url(r'^note/add/$', app1_views.add_note,
{ 'username':None}, name='add_note_own'),
...
...
)
APP1 / views.py
def add_note(request, username=None):
...
...
第一个问题:
现在例如约翰已经登录并且在杰克的笔记页面上,约翰想发布一张纸条
我希望能够做到这样或接近这样的事情:
模板app1 / notes.html
{% if request.user.is_authenticated %}
{%if in his/her own note page %}
<a href="{% url add_note_own %}">add note</a> Expected generated url: www.domain.com/app1/add
{%else}
<a href="{ %url add_note %}">add note</a> Expected generated url: www.domain.com/foo/jack/app1/add
{%endif%}
{% endif %}
这可能吗?
另一件事,
如果约翰在杰克的页面写了注释,并且django给出了注释id == 3,
为了显示该注释,只有这些网址有效:
www.example.com/foo/jack/app1/3
www.example.com/foo/app1/3(如果杰克已登录)
第二个问题:
我想要实现的是反向匹配可以接受捕获的参数到
当url配置中包含include()时,父urlconf。
可以这样做吗?
或者如果你明白我的意思并且可以提供更简单的解决方案,请这样做:) 抱歉,如果这篇文章令人困惑,我很困惑。 非常感谢您的耐心等待。
我正在使用django 1.2.5
答案 0 :(得分:0)
您需要传递用户名,例如:
urlpatterns = patterns('',
# I expect this pattern receives the username parameter from above
url(r'^note/add/(?P<username>[^/]+)/$', app1_views.add_note, name='add_note'),
# username is an optional argument, so no need to pass it
url(r'^note/add/$', app1_views.add_note, name='add_note_own'),
)
然后在模板中:
{% if request.user.is_authenticated %}
{% if page.owner == request.user %}
<a href="{% url add_note_own %}">add note</a>
{% else %}
<a href="{% url add_note request.user.username %}">add note to {{ request.user.username }}</a>
{% endif %}
{% endif %}