Задать вопрос
@Dymm_Dm

Как передать переменную в следующие шаблоны django?

в django проекте есть определенный список услуг, и есть анкета для записи на определенную услугу
'''models.py'''

class Person(models.Model): 
     """ Клиенты """ 
     name = models.CharField(max_length=50) 
     birthday_time = models.DateTimeField()  # Время 
     birthday_place = models.CharField(max_length=200)  # Место 
     contacts = models.CharField(max_length=250)  # Контакты 
     comment = models.TextField(null=True, blank=True)  # Дополнительная информация

    def __str__(self): 
         return self.name

class Services(models.Model): 
     """ Услуги """ 
     name = models.CharField(max_length=200, unique=True) 
     text = models.TextField(blank=True) 
     online_price = models.CharField(max_length=6, blank=True)  # Онлайн-прайс 
     audio_price = models.CharField(max_length=6, blank=True)  # Аудио сообщения 
     text_price = models.CharField(max_length=6, blank=True)  # Текст 
  
     def __str__(self): 
         return self.name


'''views.py'''

class ServicesList(ListView): 
     """ Все услуги """ 
     model = Services 
     ordering = 'pk' 
     template_name = 'services.html' 
     context_object_name = 'services' 
     paginate_by = 5 
  
  
 class ServiceDetail(DetailView): 
     """ Выбранная услуга """ 
     model = Services 
     template_name = 'service.html' 
     context_object_name = 'service' 
  
  
 class PersonCreate(CreateView): 
     """ Анкета для клиентов """ 
     model = Person 
     template_name = 'enroll.html' 
     context_object_name = 'quest' 
     fields = ['name', 'service', 'birthday_time', 'birthday_place', 'contacts', 'comment'] 
     success_url = reverse_lazy('success')


В шаблоне со списком услуг через цикл выводим все услуги, делая название услуги ссылкой на страницу услуги:
'''services.html'''

{% block content %} 
 <H1>Мои Услуги</H1> 
     <hr> 
     <hr> 
 <table> 
     {% for service in services %} 
     <tr> 
         <td class="first"><b><a href="{% url 'service' service.id  %}">{{ service.name }}</a></b></td> 
         <td class="first">{{ service.text|truncatechars:500 }}</td> 
         <td class="first">{{ service.online_price }}</td> 
         <td class="first">{{ service.audio_price }}</td> 
         <td class="first">{{ service.text_price }}</td> 
     </tr> 
     {% endfor %}
{% endblock %}

'''service.html'''

{% block content %} 
 <b>{{ service.name }}</b> 
 {{ service.text }} 
 {{ service.online_price }} 
 {{ service.audio_price }} 
 {{ service.text_price }} 
 <button> 
     <a href="/enroll/">Записаться</a> 
 </button> 
 {% endblock %}


как передать значение {{ service.name }} в следующие шаблоны, к примеру:
'''enroll.html'''

{% block content %} 
 <p>Записаться на {{ service_name }}</p> 
 <br><br> 
 <form action="" method="post"> 
     {% csrf_token %} 
     {{ form.as_p }} 
     <input type="submit" value="Отправить"/> 
 </form> 
 {% endblock %}
  • Вопрос задан
  • 209 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Mi11er
@Mi11er
A human...
У вас урла с записью должна вести на услугу , там уже в контексте можете форму для записи сделать

Условно
Service/2/enroll

Знаете какая там услуга ну а дальше уже ерунда.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SoreMix
@SoreMix
yellow
Почему бы не добавить еще одну view и urlpattern который будет обрабатывать URL вида enroll/<slug:service_name>.
Либо раз уж мы находимся на странице с услугой, перенести форму сразу туда. Список услуг->Услуга->Запись на услугу как-то много кликов. Список Услуг -> Услуга + Запись на услугу

ps. не пишу на django
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы