Как отслеживать url в формах на django?

Пользователь

от judd , в категории: Python , 7 месяцев назад

Как отслеживать url в формах на django?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от marc_zboncak , 6 месяцев назад

@judd 

Чтобы отслеживать URL в формах Django, вы можете использовать метод get_absolute_url() в моделе и функцию reverse() для построения URL.


Вот пример:

  1. В моделе добавьте метод get_absolute_url() для создания URL объекта. Например:
1
2
3
4
5
6
7
from django.urls import reverse

class YourModel(models.Model):
    # поля модели
    
    def get_absolute_url(self):
        return reverse('your-view-name', args=[str(self.id)])


  1. Создайте HTML-шаблон для формы, в которой вы можете использовать action для указания URL, куда будет отправляться данные формы. Например:
1
2
3
4
<form action="{{ object.get_absolute_url }}" method="post">
    <!-- поля формы -->
    <button type="submit">Submit</button>
</form>


  1. В файле urls.py определите путь к вашему представлению. Укажите имя представления, чтобы использовать его в методе get_absolute_url() вашей модели.
1
2
3
4
5
6
from django.urls import path
from . import views

urlpatterns = [
    path('your-url/<int:pk>/', views.YourView.as_view(), name='your-view-name'),
]


  1. В представлении (views.py) реализуйте обработку формы. Например:
1
2
3
4
5
6
from django.views.generic.edit import CreateView
from .models import YourModel

class YourView(CreateView):
    model = YourModel
    fields = '__all__'


Теперь, когда вы отправляете форму, она будет отправляться на конкретный URL, который вы определили в методе get_absolute_url() вашей модели.

Пользователь

от brook , 3 дня назад

@judd 

Если у вас есть форма в Django и вы хотите отслеживать URL, который был использован для отправки формы, вы можете использовать следующий подход:

  1. Добавьте скрытое поле в вашу форму, которое будет содержать URL, с которого пользователь отправил форму. Например, вы можете добавить поле "return_url" в вашу форму:
1
2
3
class YourForm(forms.Form):
    # другие поля формы
    return_url = forms.CharField(widget=forms.HiddenInput())


  1. В представлении, отображающем вашу форму, установите значение скрытого поля "return_url" равным текущему URL перед его отображением:
1
2
3
4
def your_view(request):
    form = YourForm()
    form.fields['return_url'].initial = request.META.get('HTTP_REFERER')
    return render(request, 'your_template.html', {'form': form})


  1. В вашем HTML-шаблоне для формы включите скрытое поле "return_url" и его значение:
1
2
3
4
5
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Submit">
</form>


  1. При отправке формы вы получите доступ к значению поля "return_url" в вашем представлении, обработчике формы или представлении, куда форма будет отправлена, и сможете использовать его по вашему усмотрению.


Этот подход позволит вам отслеживать URL в формах Django и использовать его для редиректа или других операций.