Starck43
@Starck43
Web разработчик (Python, PHP, SQL + frontend )

Передача аргумента из шаблона в представление?

Я пытаюсь создать универсальный url для вызова представления с передачей аргумента и без.

Например: site.ru/contacts я могу открыть напрямую без ссылки и хочу открыть его по ссылке в шаблоне, находясь не на главной странице.
Сейчас у меня ссылка получается такой: site.ru/design/contacts и я вынужден создать два урла для вызова представления.
Смысл в том, что если перейти по ссылке site.ru/contacts без передачи аргумента, то открывается полная страница контактов, а если с аргументом, то на странице должен отображаться sidebar

#urls.py
urlpatterns = [
	path('admin/', admin.site.urls),
	re_path(r'(?P<section>/)contacts/$', views.contacts, name='contacts-url'),
	path('contacts/', views.contacts, name='contacts-url'),
	re_path(r'about/$', views.about_us, name='about-us-url'),
	re_path(r'^thanks/$', views.message_thanks, name='thanks-url'),
	path('', include('design.urls')),
]

#views.py

def contacts(request, section=''):

	context = {
		'selected_section': section,
		'classes': ['contacts'],
	}
	print('!!!'+section)
	if section != '':
		context['classes'].append('is-nav')

	return render(request, 'contacts.html', context)

#sidebar.html

...
<li><a href="{% url 'contacts-url' section='design' %}">Контакты</a></li>
...


Может есть более логичный путь, используя один url?

Thanx
  • Вопрос задан
  • 25 просмотров
Решения вопроса 1
@rodion4dev
Наверное если только использовать такой способ. Поменять местами section/ и contacts/ и последний сделать необязательным:
urlpatterns = [
    re_path(r'contacts/(?P<section>\w+)/', views.contacts),
]

def contacts(request, section=''):
    ...
    return render(request, 'contacts.html', context)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы