Uso del contexto de solicitud en plantillas de Go
En las plantillas de Go, es posible que se encuentre con una situación en la que necesite acceder a información de la solicitud de activación, como determinar si el usuario actual es administrador. Sin embargo, las plantillas carecen de conocimiento inherente del contexto de la solicitud.
Solución: canalizaciones
Un enfoque común es utilizar canalizaciones para pasar los datos necesarios desde el controlador a la plantilla. . Esto implica crear una variable de canalización que contenga la información de contexto relevante y luego acceder a ella dentro de la plantilla. Por ejemplo:
type TemplateData struct {
IsUserAdmin bool
}
func handler(w http.ResponseWriter, r *http.Request) {
isUserAdmin := isAdmin(r)
data := TemplateData{IsUserAdmin: isUserAdmin}
t.Execute(w, data)
}
Dentro de la plantilla:
{{if .IsUserAdmin}} Go to the big red nuclear button {{end}}
Incrustar contexto
Otra opción es incrustar el contexto de solicitud en una estructura de datos de plantilla personalizada. Esto le permite acceder tanto a los datos de la plantilla como al contexto simultáneamente:
type TemplateData struct {
Data interface{}
Context *http.Request
}
Dentro de la plantilla:
{{if .Context.IsAdmin}} Go to the big red nuclear button {{end}}
Método de embudo
Si bien el método Funcs se puede utilizar para definir funciones personalizadas, no se recomienda para manejar lógica compleja como determinar permisos de usuario. Es mejor mantener dichas tareas dentro de los manejadores o controladores.
Mejores prácticas
En general, se considera una mejor práctica limitar las plantillas para manejar la lógica de visualización y evitar introducir lógica de negocios. o solicitar dependencias de contexto. Sin embargo, en determinadas situaciones, puede ser necesario acceder a información de solicitud específica, de ahí los métodos descritos anteriormente.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3