AttributeError 'str' 对象没有属性 'path'

Posted

技术标签:

【中文标题】AttributeError \'str\' 对象没有属性 \'path\'【英文标题】:AttributeError 'str' object has no attribute 'path'AttributeError 'str' 对象没有属性 'path' 【发布时间】:2014-03-04 10:46:38 【问题描述】:

我已经为这个项目实现了一个内联表单集,每当我进入这个视图时,它都会显示标题中所述的错误。在此之前,我的队友使用 bootstrap.js 在页面上实现了标签式导航。为了使选项卡起作用,它正在寻找每个视图的请求。我以前遇到过同样的问题,但由于它不是基于类的视图,所以已修复。

现在,它显示了相同的错误,但来自不同的视图,这次是来自 CreateView,它并没有真正返回引导程序正在寻找的请求。我不知道如何解决这个问题,所以任何人都可以建议我解决这个问题的一个好的开始吗?

顺便说一句,我在 Django 方面的经验并不多,仍在学习中,但足以了解其中的细节。

部分代码:

views.py(摘录,借用 Kevin Dias 的一些代码)

class AddRecipe(CreateView):
    template_name = 'addrecipe.html'
    model = Recipes
    form_class = RecipeForm
    success_url = '/success/'

    def get(self, request, *args, **kwargs):
        self.object = None
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        ingredient_form = IngredientFormSet()
        instruction_form = InstructionFormSet()
        return self.render_to_response(
            self.get_context_data(form = form,
                                  ingredient_form = ingredient_form,
                                  instruction_form = instruction_form),)

    def post(self, request, *args, **kwargs):
        self.object = None
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        ingredient_form = IngredientFormSet(self.request.POST)
        instruction_form = InstructionFormSet(self.request.POST)
        if (form.is_valid() and ingredient_form.is_valid() and instruction_form.is_valid()):
            return self.form_valid(form, ingredient_form, instruction_form)
        else:
            return self.form_invalid(form, ingredient_form, instruction_form)

    def form_valid(self, form, ingredient_form, instruction_form):
        self.object = form.save()
        ingredient_form.instance = self.object
        ingredient_form.save()
        instruction_form.instance = self.object
        instruction_form.save()
        return HttpResponseRedirect(self.get_success_url())


    def form_invalid(self, form, ingredient_form, instruction_form):
        return self.render_to_response(
            self.get_context_data(form = form,
                                  ingredient_form = ingredient_form,
                                  instruction_form = instruction_form))

这是 base.html

中标签的代码
% load tabs %
        <div class="collapse navbar-collapse" id="navbar-collapse-1">
            <ul class="nav navbar-nav">
                <li class="% active request "^/$" %"><a href="/">Home</a></li>
                <li class="% active request "^/register/" %"><a href="/register/">Register</a></li>
                <li class="% active request "^/myrecipes/" %"><a href="/myrecipes/">My Recipes</a></li>
            </ul>

            <form class="navbar-form navbar-right" role="search">
              <div class="form-group">
                <input type="text" class="form-control" placeholder="Search">
              </div>
              <button type="submit" class="btn btn-default">Submit</button>
            </form>

        </div>

urls.py 中的视图

url(r'^addrecipe/', login_required(AddRecipe.as_view()),name='addrecipe', ),

我不太确定这是否是解决此问题所需的全部细节。如果有人想进一步阐述,请随时发表评论。谢谢!

【问题讨论】:

你能粘贴错误的堆栈跟踪吗? @SunnyNanda: dpaste.com/1590169 错误来自d:\Recipedia\recipedia-web\web\templatetags\tabs.py。你能粘贴它的代码吗? @SunnyNanda dpaste.com/1590211 【参考方案1】:

settings.py 中将django.core.context_processors.request 添加到您的TEMPLATE_CONTEXT_PROCESSORS

其余代码看起来不错。

【讨论】:

这对我来说有点意外,但谢谢!现在终于成功了!【参考方案2】:

您无法像在视图中那样访问自定义模板标签中的请求对象。您可以在这里找到解决问题的方法 - Access request in django custom template tags

【讨论】:

以上是关于AttributeError 'str' 对象没有属性 'path'的主要内容,如果未能解决你的问题,请参考以下文章

SQLAlchemy“AttributeError:'str'对象没有属性'c'”

AttributeError 'str' 对象没有属性 'path'

Django 2.2 + AttributeError:'str'对象没有属性'decode'

为啥我得到 AttributeError:'str' 对象没有属性 'strftime'?

AttributeError:'str'对象在构建逻辑回归模型时没有属性'decode'[重复]

Django-channels:AttributeError:'str'对象没有属性'profile'