VS2013 新建自定义向导 出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS2013 新建自定义向导 出错相关的知识,希望对你有一定的参考价值。

正版vs2013 profession
新建自定义向导的时候
点 新建——项目——模板 visual c++——常规——自定义向导

按默认初始设置——下一步——取消用户界面前面的勾勾——完成
然后就报错了
“处理模板文件时出错……”如下图,怎么回事?

系统是win8.1 64 位
在 同学的win7 32位下也是如此

参考技术A 我也碰到这种情况,不知道你的目的是啥?如果是解决这个错误的话很麻烦(网上有说是改相应目录下的配置文件,但是比较麻烦。),但是如果是是建一个新的向导文件,你可以单击“确定”之后即使弹出“新建项目”窗口但是这时这个项目已经建立了,所以不必管它关闭“新建项目”窗口,继续配置你的向导的默认配置,比如,lib,dll,.h文件的目录。配置完成之后编译。再单击“文件”-->"导出模板(E)..."之后你就会得到一个压缩包。将压缩包拷贝出来,解压到一个目录下,比如D:/**wizard。之后再单击“文件”-->"新建"-->"从现有代码中创建项目"。接下都是很直观的配置。(“项目文件位置”刚模板解压的目录)。配置完之后你已经可以在新建项目中看到你的向导了(并且你的对配置属性也会保留(我成功建立了boost和OpenGL向导))。如果你有更好的解决方法,请回复!

带有自定义查询集的表单向导

【中文标题】带有自定义查询集的表单向导【英文标题】:Formwizard with custom queryset 【发布时间】:2013-02-22 11:45:33 【问题描述】:

我在使用表单向导时遇到了问题。在向导的第 3 步中,我使用了一个过滤查询,该查询取决于第 1 步和第 2 步中的选择。我的向导在前进时工作正常,但是当用户按下上一步或更改第 1 步和第 2 步的选择时,事情就出错了(验证错误或过滤器不起作用)。

这是我的forms.py:

class BoekForm3(forms.Form):
    Activiteit = forms.ModelChoiceField(queryset=Activiteit.objects.all(), empty_label="(Nothing)")

如果我在 forms.py 中使用 queryset Activiteit.objects.none(),向导的 step3 中的正确字段会正确显示,但 step3 总是给出验证错误。

如果我在 forms.py 中使用 queryset Activiteit.object.all() ,则正确的(过滤的)字段在前进时会在步骤 3 中显示,并且表单会验证。但是,当用户在第 4 步中按上一步时,过滤器消失了,所有选项都可用。

Edit2: 好的,我发现每次都会读取 get_form(删除了我之前对此的编辑)。我的代码的问题是,当用户从第 4 步返回第 3 步时,get_form 使用的步骤是第 4 步。我试图改变:

"如果步骤 == 'step3'"

进入:

"如果 step == 'step3' 或 step == 'step4':"

在我看来,但这会导致 Activiteit 出现关键错误

我认为这些字段已更新到第 3 步,但表单没有。我在下面包含了我的 views.py。

class BoekingWizard(SessionWizardView):
    def get_template_names(self):
        return [TEMPLATES[self.steps.current]]

    def get_context_data(self, form, **kwargs):
        plaatjes = Activiteitsgroepen.objects.all()
        context = super(BoekingWizard, self).get_context_data(form=form, **kwargs)
        if self.steps.current == 'step1':
            context.update('plaatjes': plaatjes)
        return context

    def get_form(self, step=None, data=None, files=None):
        form = super(BoekingWizard, self).get_form(step, data, files)
        if step == 'step3':
            x = self.get_cleaned_data_for_step('step1') or 
            filter1 = x['Type_activiteit'].Groep
            y = self.get_cleaned_data_for_step('step2') or 
            if y['Aantal_personen'] < 76:
                filter2 = 'kleinere groepen'
            elif y['Aantal_personen'] > 76:
                filter2 = 'grotere groepen'
            else:
                filter2 = 'geen selectie'
            reeks = ['1','2','3']
            if y['Dagdeel'] in reeks:
                filter3 = 'Dagdeel'
            elif y['Dagdeel'] == '4':
                filter3 = 'Hele dag'
            elif y['Dagdeel'] == '5':
                filter3 = 'Middag + Avond'
            elif y['Dagdeel'] == '6':
                filter3 = 'Dag + Avond'
            form.fields['Activiteit'].queryset = Activiteit.objects.filter(Soort__Groep = filter1).filter(Grootte__Naam = filter2).filter(Dag__Omschrijving = filter3)
        return form

【问题讨论】:

你应该试试这个docs.djangoproject.com/en/dev/topics/db/queries/… 不应该 if step == 'step3': 实际上 if step == '3': 按照文档? @Rohan 好点。我为每个步骤使用自定义模板,然后步骤编号更改为我在定义模板时使用的名称。 @masterofdestiny 查询不是问题,问题是向导步骤之间传递的信息,用于过滤。 【参考方案1】:

要使用自定义步骤名称,您必须使用步骤名称和表单类的元组列表初始化向导类

FORMS = [("step1", myapp.forms.Step1Form),
         ("step2", myapp.forms.Step2Form)]

在 urls.py 中:

urlpatterns = patterns('',
    (r'^wizard/$', BoekingWizard.as_view(FORMS)),
)

【讨论】:

我知道,但这不是问题,因为当我向前走时向导正在工作。【参考方案2】:

Formwizard 似乎越来越不支持我想要的了。因此,我开始使用普通表单,并将cleaned_data 存储在会话中。好处是我有更多的控制权,而且我更清楚发生了什么。这里的想法:

def BoekingForm(request):
    if request.method == 'POST':
        if request.POST.get('BoekForm2'):
            form1 = BoekForm1(request.POST)
            if form1.is_valid():
                request.session['Data_BoekForm1'] = form1.cleaned_data
                if 'Data_BoekForm2' in request.session:
                    x = request.session['Data_BoekForm2']
                else:
                    x = None
                form2 = BoekForm2(initial = x)
                return render_to_response('boeking/form2', 
                    'form2': form2,
                , context_instance = RequestContext(request))

        else:
                return render_to_response('boeking/form1', 
                    'form1': form1,
                , context_instance = RequestContext(request))
        if request.POST.get('BoekForm3'):
            form2 = BoekForm2(request.POST)

除非有人在 Formwizard 中提供解决我的问题的解决方案,否则我将不得不将我自己的答案标记为解决方案。

【讨论】:

你能告诉我你从 1 到另一个你在做什么吗?意味着点击你调用相同视图的表单的按钮? 在模板中我有一个确认按钮: 然后这个信息在 request.POST : if request.POST.get('BoekForm2'): 你也可以像这样在表单中包含一个字段: 我在传递值时遇到问题..你能指出我的错误..如果我给你看我的代码吗? 我试试,没问题。 ***.com/questions/15522419/… 看看凯瑟琳的回答..我现在正在使用该视图..

以上是关于VS2013 新建自定义向导 出错的主要内容,如果未能解决你的问题,请参考以下文章

如何自定义创建用户向导

带有自定义查询集的表单向导

vs2010怎么新建一个用户自定义控件,最后能够导出用户自定义控件的dll文件

VS2017自定义新建模板

vs2013怎么添加自定义资源?谢谢,,,,

VS自己定义project向导开发(Custom Wizard)