【发布时间】:2021-08-30 04:40:22
【问题描述】:
我遇到了一个问题,当我尝试从基于类的视图重定向时,在 def get_context_data 上没有“重定向”,我得到了像“str”对象没有属性“用户”这样的错误。 所以我认为解决这个问题的最好方法是在我的 get_context_data 上添加请求作为参数。 但我得到标题错误。
更新:正如你告诉我的,我必须使用 self.request,我得到的错误是: 'str' 对象没有属性 'user' 我将返回 url 更新为重定向到每个用户家的方法 'redirect'。
这是我的看法:
@login_required
def redirect(request):
'''Redirige al home de cada usuario luego de validar las credenciales'''
user=request.user
grupo=request.user.groups.values_list('name', flat=True).first()
print("nombre grupo: ",grupo)
if len(grupo)>0:
redireccion='inventario:'+grupo.lower()+"-inventarios"
return HttpResponseRedirect(reverse_lazy(redireccion))
'''Anula sesión si postulante no se encuentra presente en clase'''
do_logout(request)
return render(request, "account/login.html")
class EstandarViews:
'''Vistas usuario Estandar'''
@staticmethod
def estandar_home(request):
''' Vista del home de estandar '''
return render(request, "pages/editor-estandar/home.html")
class EditorEstandarView(LoginRequiredMixin, TemplateView):
template_name = "pages/editor-estandar/estandar.html"
def get_context_data(self, request, **kwargs):
user = self.request.user
print("usuario: ", user)
if not self.request.user.groups.filter(name="Editor-Estandar").exists():
print("no puedes estar aqui")
return redirect('redirect)
context = super().get_context_data(**kwargs)
context["sedes"] = Sede.objects.values("nombre", "id")
context["recintos"] = Recinto.objects.values("id", "codigo", "nombre")
context["carreras"] = Carrera.objects.values("id", "codigo", "nombre")
return context
editor_estandar_view = EditorEstandarView.as_view()
URLS.PY
app_name = "inventario"
general_urlpatterns = [
path("", view=home_view, name="home"),
]
editor_estandar_urlpatterns = [
path("estandar-inventario/", view=editor_estandar_view, name="editor-estandar-inventarios"),
]
editor_inventario_urlpatterns = [
path("estandar-inventario/", view=editor_inventario_view, name="editor-inventario-inventarios"),
]
visualizador_urlpatterns = [
path("estandar-inventario/", view=visualizador_inventario_view, name="visualizador-inventarios"),
]
urlpatterns = [
# path("", include(general_urlpatterns)),
path("home/", include(general_urlpatterns)),
path('', LoginView.as_view(redirect_authenticated_user=True,template_name="account/login.html"), name="login"),
path('redirect/', redirect, name='redirect'),
path("editor-estandar-inventarios/", include(editor_estandar_urlpatterns)),
path("editor-inventario-inventarios/", include(editor_inventario_urlpatterns)),
path("visualizador/", include(visualizador_urlpatterns)),
path("mantenedor-productos/", view=mantenedor_productos_view, name="mantenedor-productos"),
path("mantenedor-laboratorios/", view=mantenedor_recintos_view, name="mantenedor-recintos"),
path("mantenedor-sedes/", view=mantenedor_sedes_view, name="mantenedor-sedes"),
path("mantenedor-carreras/", view=mantenedor_carreras_view, name="mantenedor-carreras"),
path("mantenedor-proveedor/", view=mantenedor_proveedores_view, name="mantenedor-proveedores"),
path("mantenedor-usuario/", view=mantenedor_usuarios_view, name="mantenedor-usuarios"),
path("estandar-inventario/", view=estandar_inventario_view, name="estandar-inventarios"),
path("inventario/", view=inventario_view, name="inventario"),
path("cotizaciones/", view=cotizaciones_view, name="cotizaciones"),
path("cotizaciones-por-producto/", view=cotizaciones_por_producto_view, name="cotizaciones-por-producto"),
path("ficha-presentacion/", view=ficha_presentacion_view, name="ficha-presentacion"),
path("sugerencias/", view=sugerencias_view, name="sugerencias"),
path("cumplimiento/", view=cumplimiento_estandar_view, name="cumplimiento"),
path("faltantes/", view=faltantes_estandar_view, name="faltantes"),
path("sugerencias-reporte/", view=sugerencias_estandar_view, name="repo_sugerencias"),
# path("~update/", view=user_update_view, name="update"),
# path("<str:username>/", view=user_detail_view, name="detail"),
]
【问题讨论】:
-
不,它没有:/
-
嗯,你的问题从字面上说你得到了错误
get_context_data() missing 1 required positional argument: 'request'。重复的目标,甚至 do 下面的答案都解决了这个错误。尽管您的代码中有更多错误,但最好单独询问它们。作为提示,尽管您定义了函数redirect(request)(您期望请求对象的位置)并使用 stringredirect('redirect)... 字典(上下文)不是一些响应对象... -
也许如果我重定向到另一个可以从自身生成请求的 url 函数,然后返回请求会起作用?
标签: python-3.x django django-views