私のプロジェクトのすべてのテンプレートには、匿名ユーザーとして入力した場合にのみ表示される登録ボタンがあります。このボタンをクリックすると、モーダル ウィンドウが開き、2 つの登録フォームが表示されます。問題は、機能するためにすべてのビューにこのコードを含める必要があることです。すべてのビューで登録フォームに関連するコードを繰り返さないようにする方法はありますか?
明確化: #USER REGISTRATION FORM RELATIVE および #MERCHANT REGISTRATION FORM RELATIVE としてコメントされているすべてのビューで繰り返されるコード im
私のモーダルウィンドウ:
私の意見の 1 つ(75 行):
def patrimonio_view(request, backend_registro_usuario, backend_registro_comerciante, success_url=None, form_class_usuario=None, form_class_comerciante=None,
disallowed_url='registration_disallowed',
template_name='home/patrimonio.html',
extra_context=None):
#PATRIMONIO QUERYS
pat = patrimonio.objects.all()
ciu = ciudad.objects.all()
#USER REGISTRATION FORM RELATIVE
backend_registro_usuario = get_backend(backend_registro_usuario)
if not backend_registro_usuario.registration_allowed(request):
return redirect(disallowed_url)
if form_class_usuario is None:
form_class_usuario = backend_registro_usuario.get_form_class(request)
if "Registrar_usuario" in request.POST:
form_class_usuario = form_class_usuario(data=request.POST, files=request.FILES)
if form_class_usuario.is_valid():
new_usuario = backend_registro_usuario.register(request, **form_class_usuario.cleaned_data)
if success_url is None:
to, args, kwargs = backend_registro_usuario.post_registration_redirect(request, new_usuario)
return redirect(to, *args, **kwargs)
else:
return redirect(success_url)
else:
form_class_usuario = form_class_usuario()
if extra_context is None:
extra_context = {}
context = RequestContext(request)
for key, value in extra_context.items():
context[key] = callable(value) and value() or value
#MERCHANT REGISTRATION FORM RELATIVE
backend_registro_comerciante = get_backend(backend_registro_comerciante)
if not backend_registro_comerciante.registration_allowed(request):
return redirect(disallowed_url)
if form_class_comerciante is None:
form_class_comerciante = backend_registro_comerciante.get_form_class(request)
if "Registrar_comerciante" in request.POST:
form_class_comerciante = form_class_comerciante(data=request.POST, files=request.FILES)
if form_class_comerciante.is_valid():
new_comerciante = backend_registro_comerciante.register(request, **form_class_comerciante.cleaned_data)
if success_url is None:
to, args, kwargs = backend_registro_comerciante.post_registration_redirect(request, new_comerciante)
return redirect(to, *args, **kwargs)
else:
return redirect(success_url)
else:
form_class_comerciante = form_class_comerciante()
if extra_context is None:
extra_context = {}
context = RequestContext(request)
for key, value in extra_context.items():
context[key] = callable(value) and value() or value
#WE OBTAIN THE USERS FOR EACH GROUP
usuario_group = Group.objects.get(name="usuario").user_set.all()
comerciante_group = Group.objects.get(name="comerciante").user_set.all()
#RENDER
return render_to_response(template_name,
{'form_registro_usuario': form_class_usuario,
'form_registro_comerciante': form_class_comerciante,
'patrimonio':pat,
'ciudad':ciu,
'usuario_group': usuario_group,
'comerciante_group': comerciante_group,
},
context_instance=context)
解決策 - リファクタリングされたコード(29 行):
def patrimonio_view(request,
template_name='home/patrimonio.html'):
#PATRIMONIO QUERYS
pat = patrimonio.objects.all()
ciu = ciudad.objects.all()
if request.method == 'POST':
if "Registrar_usuario" in request.POST:
#USER REGISTRATION FORM RELATIVE
return register_usuario()
if "Registrar_comerciante" in request.POST:
#MERCHANT REGISTRATION FORM RELATIVE
return register_comerciante()
#WE OBTAIN THE USERS FROM EACH GROUP
usuario_group = Group.objects.get(
name="usuario").user_set.all()
comerciante_group = Group.objects.get(
name="comerciante").user_set.all()
#RENDER
return render_to_response(template_name,{
'patrimonio':pat,
'ciudad':ciu,
'usuario_group': usuario_group,
'comerciante_group': comerciante_group,
}, context_instance=RequestContext(request))