/ / AttributeError L'objet 'str' n'a pas d'attribut 'chemin' - django, django-class-based-views-views, attributeerror

L'objet AttributeError 'str' n'a pas d'attribut 'path' - django, django-class-based-views, attributeerror

J'ai implémenté un formset en ligne pour cetteprojet, et chaque fois que je vais à cette vue, il montre l'erreur indiquée dans le titre. Avant cela, mon coéquipier avait mis en place une navigation par onglets sur la page à l'aide de bootstrap.js. Pour que les onglets fonctionnent, il recherche une requête pour chaque vue. Je rencontrais le même problème auparavant, mais je l’ai corrigé, car il ne s'agissait pas d'une vue basée sur les classes.

Maintenant, il montre la même erreur, mais à partir d'unvue différente, et cette fois-ci, elle provient d’un CreateView, et elle ne renvoie pas vraiment une demande que bootstrap recherche. Je ne suis pas sûr de savoir comment aborder ce problème, alors est-ce que quelqu'un peut me suggérer un bon départ pour résoudre ce problème?

En passant, je ne suis pas aussi expérimenté à Django, je suis encore en train d’apprendre, mais assez pour connaître les coins et les recoins.

Une partie du code:

views.py (extrait, emprunté du code à 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))

Voici le code pour les onglets dans 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>

la vue dans urls.py

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

Je ne suis pas tout à fait sûr qu’il s’agisse de tous les détails nécessaires pour résoudre ce problème. N'hésitez pas à commenter si quelqu'un souhaite des précisions. Merci!

Réponses:

1 pour la réponse № 1

Ajouter django.core.context_processors.request à ton TEMPLATE_CONTEXT_PROCESSORS dans settings.py

Le reste du code a l'air bien.


0 pour la réponse № 2

Vous n’avez pas accès à la demande d’objet dans votre balise de modèle personnalisée comme vous le faites dans les vues. Vous pouvez trouver ici pour résoudre votre problème - Demande d'accès dans les balises de modèle personnalisé django