Я работаю над проектом django (Django v2.0), в котором есть пользователи из разных групп, эта группа настроена в профиле пользователя. Я хотел бы сделать веб-сайт более личным и иметь группу пользователей в начале URL-адреса веб-сайта (добавляемого через слаг) после входа в систему.
В идеале, когда они войдут в систему, они будут перенаправлены на нужную страницу с этим слагом в начале URL. На странице входа в систему я получаю доступ к группе пользователей, эта группа вызывается и с этого момента будет называться отрядом, чтобы свести к минимуму путаницу с группами Django. Вот мой вид записи класса входа, где я получаю это:
def post(self, request):
def normal_user(user):
return user.groups.filter(name='Normal_User').exists()
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
if normal_user(user):
redirecting_url = 'accounts:home'
elif user.is_superuser:
redirecting_url = 'admin:index'
slug = user.userprofile.troop
return redirect(redirecting_url, slug=slug)
else:
form = AuthenticationForm()
error = True
args = {'form': form, 'error': error}
return render(request, self.template_name, args)
В этом случае я пытаюсь получить доступ к URL-адресу «account», который я назвал «home» и который находится в моем приложении «account».
Моя домашняя функция в views.py в учетных записях приложения имеет следующий код:
def home(request, slug):
args = {'user': request.user}
return render(request, 'accounts/home.html', args)
Я не хочу ничего делать со слагом, кроме отображения его в URL.
Мой шаблон выглядит так:
<div class="container">
<br>
<h2><strong>Your Progress:</strong></h2><br>
<h3>
<a href="{% url 'accounts:progress_page' slug=instance.slug %}" style="color:red"><strong>50% progress</strong></a>
<div class="progress">
<div class="progress-bar bg-danger progress-bar-striped progress-bar-
animated" role="progressbar" style="width:50%" aria-valuenow="50" aria-
valuemin="0" aria-valuemax="100">50%</div> </div>
</div></h3>
<br><br>
{% endblock %}
У меня также есть ссылка на 'home' в моей панели навигации, и я связываю ее аналогично ссылке выше, используя {% url 'account: home' slug = instance.slug%}
В настоящее время у меня появляется следующая ошибка:
"NoReverseMatch в / BC / account /
Реверс для 'home' с ключевыми словами '{' slug ':' '}' не найден. Попробован 1 шаблон (ов): ['(? P [-a-zA-Z0-9 _] +) / account / $'] "
Слизень в этом случае - «BC».
Мой urls.py выглядит так:
В корневой папке:
main_urls = [
path('leaders/admin/', admin.site.urls),
path('account/', include('accounts.urls', namespace='accounts'))
]
urlpatterns = [
path('', include('home.urls', namespace='home_page')),
path('login/', include('login.urls', namespace='login')),
path('<slug:slug>/', include(main_urls))
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
А мой urls.py в приложении для моих учетных записей выглядит примерно так:
app_name="accounts"
urlpatterns = [
path('', views.home, name="home")
]
Извините за длинное описание, но я читал все возможные сайты / видео, которые я мог найти на слизняках Django, и пока не смог найти ничего, что работает Может ли кто-нибудь помочь мне с этой проблемой?