Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Django-那里';有什么方法可以避免在我的所有视图中重复代码?_Jquery_Django_View_Registration - Fatal编程技术网

Jquery Django-那里';有什么方法可以避免在我的所有视图中重复代码?

Jquery Django-那里';有什么方法可以避免在我的所有视图中重复代码?,jquery,django,view,registration,Jquery,Django,View,Registration,我的项目中的所有模板都有一个注册按钮,只有当您以匿名用户身份输入时才能看到该按钮。该按钮打开一个包含两个注册表的模式窗口。问题是,我必须在所有视图中都包含此代码才能工作。有什么方法可以避免在我的所有视图中重复与注册表相关的代码 澄清:我在所有视图中重复的代码被评论为#用户注册表相对和#商户注册表相对 我的模式窗口: 我的一个观点(75行): 解决方案-重构代码(29行): 在多个视图中包含代码至少有三个选项:包含标记、上下文处理器和模板继承。这取决于哪一个对您的设置最有意义 A可能是将条件逻辑

我的项目中的所有模板都有一个注册按钮,只有当您以匿名用户身份输入时才能看到该按钮。该按钮打开一个包含两个注册表的模式窗口。问题是,我必须在所有视图中都包含此代码才能工作。有什么方法可以避免在我的所有视图中重复与注册表相关的代码

澄清:我在所有视图中重复的代码被评论为#用户注册表相对和#商户注册表相对

我的模式窗口

我的一个观点(75行):

解决方案-重构代码(29行):


在多个视图中包含代码至少有三个选项:包含标记、上下文处理器和模板继承。这取决于哪一个对您的设置最有意义

A可能是将条件逻辑排除在模板之外的最佳选择,因为您需要检查用户是否匿名,您可以在处理器的服务器端执行以下操作:

from django.template.loader import render_to_string

def your_context_processor(request):
    if request.user.is_anonymous():
        return {'extra_context': render_to_string('anonymous-only-content.html')}
    else:
        return {}
然后在模板中,您只需执行以下操作:

{{ extra_context }}

如果该变量已填充,则需要仅匿名代码进行渲染。这些都是简单的例子,但希望能给你一些想法。

如果我遗漏了什么,就告诉我我会解决它。对不起,我就是听不懂其他代码

def patrimonio_view(request, 
         backend_registro_usuario, backend_registro_comerciante, 
         form_class_usuario=None, form_class_comerciante=None,
         disallowed_url='registration_disallowed', template_name='home/patrimonio.html',
         extra_context=None, success_url=None):

    #PATRIMONIO QUERYS
    pat = patrimonio.objects.all()
    ciu = ciudad.objects.all()

    form_class_usuario = form_class_usuario()
    form_class_comerciante = form_class_comerciante()

    if request.method == 'POST':
        if "Registrar_usuario" in request.POST:
            #USER REGISTRATION FORM RELATIVE
            return user_registration(request, 
                backend_registro_usuario, 
                disallowed_url, 
                form_class_usuario, 
                success_url
                )

        if "Registrar_comerciante" in request.POST:
            #MERCHANT REGISTRATION FORM RELATIVE
            return merchant_registration(request, 
                backend_registro_comerciante, 
                disallowed_url, 
                form_class_comerciante, 
                success_url
                )

    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


    #Obtenemos los usuarios de cada grupo
    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)

def user_registration(request, 
        backend_registro_usuario, form_class_usuario, 
        disallowed_url, success_url):

    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)

    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)

def merchant_registration(request, 
        backend_registro_comerciante, form_class_comerciante, 
        disallowed_url, success_url):

    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)

    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)

注释为#相对用户注册表单和#相对商户注册表单的代码将存在于我的所有视图中,因为当您未登录时,模式窗口的表单可以从我的任何模板中使用。为什么不使用AJAX来处理表单帖子呢,因此,您可以隔离视图,而不必在每个视图中嵌入所有代码?我正在搜索有关它的文档。到目前为止,这是我所知道的最好的:关于Django和AJAX也有很多问题。几次搜索会给你带来很多的例子。谢谢你的回答,布兰登!我尝试使用上下文处理器来呈现包含我的表单的html文档,但字段不显示,提交按钮不起作用:当我使用{%include%}Hmm时也会发生同样的情况。如果看不到上下文处理器的具体实现,很难确定您的内容为什么不会显示。如果您也尝试过使用模板标记,但它没有出现,那么代码中可能有未处理的异常,这将导致Django在模板层吞下该异常。非常感谢您!我不太清楚如何在视图中使用方法。现在一切都干净了。如果你想看的话,我在你的帮助中发布了一个更加重构的版本。
{{ extra_context }}
def patrimonio_view(request, 
         backend_registro_usuario, backend_registro_comerciante, 
         form_class_usuario=None, form_class_comerciante=None,
         disallowed_url='registration_disallowed', template_name='home/patrimonio.html',
         extra_context=None, success_url=None):

    #PATRIMONIO QUERYS
    pat = patrimonio.objects.all()
    ciu = ciudad.objects.all()

    form_class_usuario = form_class_usuario()
    form_class_comerciante = form_class_comerciante()

    if request.method == 'POST':
        if "Registrar_usuario" in request.POST:
            #USER REGISTRATION FORM RELATIVE
            return user_registration(request, 
                backend_registro_usuario, 
                disallowed_url, 
                form_class_usuario, 
                success_url
                )

        if "Registrar_comerciante" in request.POST:
            #MERCHANT REGISTRATION FORM RELATIVE
            return merchant_registration(request, 
                backend_registro_comerciante, 
                disallowed_url, 
                form_class_comerciante, 
                success_url
                )

    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


    #Obtenemos los usuarios de cada grupo
    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)

def user_registration(request, 
        backend_registro_usuario, form_class_usuario, 
        disallowed_url, success_url):

    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)

    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)

def merchant_registration(request, 
        backend_registro_comerciante, form_class_comerciante, 
        disallowed_url, success_url):

    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)

    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)