【问题标题】:django problem:captured parameter in parent urlconf , incude() and reverse matchdjango 问题:父 urlconf 中的捕获参数,incude() 和反向匹配
【发布时间】:2011-04-13 08:41:37
【问题描述】:

如果我想要一个名为 app1 的 django 应用程序,它可以让用户在某人的页面和他/她自己的页面上发布注释。 如果用户已经登录,则不需要在url中使用username,但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):
    ...
    ...

第一个问题
现在,例如 john 已登录,并且在 jack 的笔记页面上,john 想要发布一条笔记。
我希望能够做这样的事情或接近这样的事情:

模板 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,
为了说明这一点,只有这些 url 是有效的:
www.example.com/foo/jack/app1/3
www.example.com/foo/app1/3(如果杰克登录)

第二个问题:
我想要实现的是反向匹配可以接受捕获的参数高达 url 配置中涉及 include() 时的父 urlconf。 这个可以吗?

或者如果你明白我的意思并且可以提供更简单的解决方案,请这样做:)
抱歉,如果这篇文章令人困惑,我自己也很困惑。 非常感谢您的耐心。

我正在使用 django 1.2.5

【问题讨论】:

    标签: django


    【解决方案1】:

    你需要传递一个用户名,一个例子可以是:

    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 %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      • 2018-08-18
      相关资源
      最近更新 更多