проблема django: захваченный параметр в родительском urlconf, incude () и обратное совпадение

#django

#django

Вопрос:

Если я хочу, чтобы приложение django называлось app1, которое может отправлять пользователю заметку на чью-либо страницу и на его / ее собственную страницу. И если пользователь вошел в систему, нет необходимости использовать username в URL, но параметр username в url может выступать в качестве родительского в 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,
поэтому, чтобы показать эту заметку, допустимы только эти URL:
www.example.com/foo/jack/app1/3
www.example.com/foo/app1/3 (если джек вошел в систему)

Второй вопрос:
чего я хочу добиться, так это того, что обратное совпадение может принимать захваченный параметр вплоть до родительского urlconf, когда include () задействован в конфигурации url. Можно ли это сделать?

Или, если вы понимаете, что я имею в виду, и можете предложить более простое решение, пожалуйста, сделайте это 🙂
извините, если этот пост сбивает с толку, я сам в замешательстве. Большое спасибо за терпение.

Я использую django 1.2.5

Ответ №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 %}