Как обработать пустое значение аргумента в функции python представления Django?
У меня есть приложение, которое передает имя пользователя из шаблона HTML в URL и функции в представлениях.
views.py
def cv_detail_view(request, username):
if username=='':
return redirect("accounts:login")
else:
user = get_object_or_404(User, username=username)
try:
personal_info = PersonalInfo.objects.get(user=user)
except PersonalInfo.DoesNotExist:
# if personal info doesn't exist redirect to create or 404 page.
if user == request.user:
return redirect("cvs:create_personal_info")
else:
raise Http404("CV Does Not Exist.")
work_experience = WorkExperience.objects.filter(user=user)
education = Education.objects.filter(user=user)
context = {
"personal_info": personal_info,
"work_experience": work_experience,
"education": education,
}
return render(request, "detail.html", context)
Html сниппет:
<li><a class="nav-link" href="{% url 'cvs:cv_detail' username=request.user.username %}">Use templates</a></li>
ursl.py
path(r'^(?P<username>[\w._-]+)/$',views.cv_detail_view,name='cv_detail'),
Моя идея состоит в том, чтобы перенаправлять пользователей на страницу входа в систему, если параметр username
пуст, т.е. если пользователь не вошел в систему. Однако я получаю следующую ошибку:
NoReverseMatch at /
Reverse for 'cv_detail' with keyword arguments '{'username': ''}' not found. 1 pattern(s) tried: ['cvs/\\^\\(\\?P(?P<username>[^/]+)\\[\\\\w\\._\\-\\]\\+\\)/\\$\\Z']
Request Method: GET
Request URL: http://127.0.0.1:9090/
Django Version: 4.0.6
Exception Type: NoReverseMatch
Exception Value:
Reverse for 'cv_detail' with keyword arguments '{'username': ''}' not found. 1 pattern(s) tried: ['cvs/\\^\\(\\?P(?P<username>[^/]+)\\[\\\\w\\._\\-\\]\\+\\)/\\$\\Z']
Есть ли способ обрабатывать пустое значение в аргументах функции?
Можно ли добавить в шаблон следующее:
{% if request.user.username %}
<li><a class="nav-link" href="{% url 'cvs:cv_detail' username=request.user.username %}">Use templates</a></li>
{% endif %}