3

I am fetching the current url of the browser (which keeps changing) in a javascript variable (say var_url). I have a django model Url. I want to create its object using a view function create_url().

Earlier When I used a form, I used request.POST['field']. Now I don't have a form and I want to pass the value of var_url. How can that be done?

This was my view function when I was using a form:

def create_url(request):
if request.method == 'POST':
    text=request.POST['field']
    url_result=Url.objects.get_or_create(
        url_text=text
        )
    return HttpResponse('Url Object Created')

And the following was my form:

<form name='urlForm' method="post" action="{% url 'create_url'%}" id="create" >
        {% csrf_token %}
        <input type="text" id="myurl" name="field"/>
        <input type="submit" name="submit" value="Submit">
    </form>

Now rather than a form, I have this:

<div id='results'></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script type="text/javascript">
    window.addEventListener('message',function(e){
        results.innerHTML = e.data;
    });
</script>

I want to send the content of div tag to my view function.

9
  • Please add the code posing the problem Commented Jun 14, 2018 at 7:18
  • add your form and template Commented Jun 14, 2018 at 7:24
  • @DirkHorsten I have added the code. Please check the updated question. Commented Jun 14, 2018 at 8:00
  • @seuling Please check the updated question. Commented Jun 14, 2018 at 8:00
  • What data you want to send? Commented Jun 14, 2018 at 8:02

1 Answer 1

2

You have two way - using form and using ajax for sending data.

Assume that you have data called result_data in js.

First, use existing form

In this way, you have to update your inner data to form field (i.e. make hidden result_data field to send form data).

<form name='urlForm' method="post" action="{% url 'create_url'%}" id="create" >
    {% csrf_token %}
    <input type="text" id="myurl" name="field"/>
    <input type="hidden" name="result_data" value="" id="js_data_input">
    <input type="submit" name="submit" value="Submit">
</form> 

Then you add javascript code to add your result_data to your hidden input value. Maybe like this.. (I'm not good at javascript, so make it your own way)

<script>
    $('#js_data_input').val(result_data)
</script>

Then just submit your form with this data.

Second, use ajax

If you send your data without submit form (it means that not reload/escape current page), you can use ajax.

When using ajax, you have to make other view that receive your ajax request.

If you don't know about ajax, please check w3school or other web site.

This is example for send result_data using ajax

  $.ajax({
    type: "POST",
    url: '/your/path/to/ajax_view/url/',
    data: {
      'result_data': result_data,
      'csrfmiddlewaretoken': '{{ csrf_token }}'
    },
    dataType: "json",
    success: function(response) {
      if (response.result == 'ok') {
        alert(response.message);
      } else {
        alert('Failed');
      }
    }
  })

You have to add csrfmiddlewaretoken. Else, you got 403 forbidden error. You can make csrfmiddlewaretoken by js or just using {{ csrf_token }} from django.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.