2014-02-07 8 views
0

Я реализовал встроенный набор форм для этого проекта, и всякий раз, когда я перехожу к этому представлению, он показывает ошибку, указанную в названии. До этого мой товарищ по команде реализовал вкладку навигации на странице с помощью bootstrap.js. Чтобы вкладки работали, он ищет запрос для каждого представления. Я уже сталкивался с той же проблемой, но исправил ее, поскольку это не было представление на основе классов.Объект AttributeError 'str' не имеет атрибута 'path'

Теперь он показывает ту же ошибку, но из другого представления, и на этот раз это из 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',), 

Я не совсем уверен, что это все детали, необходимые для решения этой проблемы. Не стесняйтесь комментировать, если кто-то хочет дальнейшей разработки. Благодаря!

+0

Можете ли вы вставить стопку ошибки? –

+0

@SunnyNanda: http://dpaste.com/1590169/ – XtraRyce

+0

Ошибка исходит из 'd: \ Recipedia \ recipedia-web \ web \ templatetags \ tabs.py'. Можете ли вы вставить свой код? –

ответ

1

Добавить django.core.context_processors.request к вашему TEMPLATE_CONTEXT_PROCESSORS в settings.py

Остальная часть кода выглядит отлично.

+0

Это было немного удивительно для меня, но спасибо! наконец, он работал! – XtraRyce

0

У вас нет доступа к объекту запроса в вашем настраиваемом теге шаблона, как в представлениях. Вы можете найти, чтобы решить проблему здесь - Access request in django custom template tags

Смежные вопросы