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