Django/Jquery/Javascript - Hur man förifyller ett formulär med URL-parametrar (autofyll formuläret)
Jag skulle vilja skicka en länk till några personer, säg:
http://www.example.com/form/[email
Om de klickar på länken kommer det att gå till sidan /form/ där formuläret med flera fält finns.
Jag skulle vilja förifylla det med den q-strängen som skulle fylla i det där "email"-fältet
fält med angiven e-postadress i strängen "[email ".
Webbplatsen är gjord i Django, skulle vilja fråga vad som är det bästa sättet att uppnå detta.
Ska jag använda JS, Jquery, Django? Vet inte var jag ska börja.
Skulle vilja ha något liknande detta:
http://support.unbounce.com/entries/307658-Kan-jag-förifylla-ettt-formulär-med-URL-parametrar-VIDEO-
men på min sida. Kan någon hjälpa till med ett enkelt formulär och exempel?
Tack
modeller.py
from django.db import models
class Example(models.Model):
username = models.CharField(max_length=200, blank=True)
email = models.CharField(max_length=200)
image = models.ImageField(upload_to='profiles', blank=True)
text = models.CharField(max_length=200, blank=True)
forms.py
from django import forms
from models import Example
class ExampleForm(forms.ModelForm):
class Meta:
model = Example
views.py
from django import forms
from models import Example
from forms import ExampleForm
from django.template import RequestContext, Context
from django.core.context_processors import csrf
from django.shortcuts import render_to_response
from django.shortcuts import render_to_response, get_object_or_404
from django import http
import os
import json
from django.http import HttpResponse
from django.http import HttpResponseRedirect
from django.conf import settings
def index(request):
if request.method == "POST":
form = ExampleForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return http.HttpResponseRedirect('/success/')
else:
form = ExampleForm()
return render_to_response('index.html', {'title': 'Example Form', 'form': form},context_instance=RequestContext(request))
urls.py
from django.conf.urls import patterns, include, url
from django.conf import settings
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^$', 'signup.views.index', name='index'),
url(r'^admin/', include(admin.site.urls)),
)
indextemplate
<form id='add_cat' method='post' enctype="multipart/form-data">{% csrf_token %}
<input id="id_username" maxlength="200" name="username" type="text" placeholder="username">
<input id="id_email" maxlength="200" name="email" type="text" >
<input id="id_picture" maxlength="200" name="picture" type="text">
<textarea id="id_text" row="3" name="first_text" placeholder="Type something…"></textarea>
<input id="add_cat_btn" type='submit' value="save">
</form>
Svar #1
request.GET.copy() skulle ge dig ett ordbok, och skicka det som en initial ordbok.
initial = request.GET.copy()
form = MyForm(initial=initial)
Det skulle fylla i de fält som finns i formuläret.
Om du skulle ha GET och POST omväxlande,
def index(request):
initial = {}
if request.GET:
initial = request.GET.copy()
form = ExampleForm(initial=initial)
if request.method == "POST":
if request.POST:
initial = request.POST.copy()
form = ExampleForm(request.POST, request.FILES, initial=initial)
if form.is_valid():
form.save()
return http.HttpResponseRedirect('/success/')
return render_to_response('index.html', {'title': 'Example Form', 'form': form },context_instance=RequestContext(request))
Svar #2
Du kan göra det antingen i Django eller i JavaScript.
Här är en JavaScript-lösning som använder getParameterByName från den SO-frågan.
Fördelen med att göra detta i JS är att det låter dig cacha serverns svar och inte kräva serverberäkningar vid varje användarförfrågan.
Ge ditt e-postformulärfält ett ID, till exempel emailfield, då kan du göra något som
var emailField = document.getElementById("emailfield");
emailField.value = getParameterByName("email"); // "q" in your example url
Inuti din ready- eller onload-hanterare (eller helt enkelt i en script-tagg placerad som det sista i bodyn)
Här är en fiol
Det fungerar inte eftersom det placerar koden i iframe, så du kan inte komma åt GET-parametrarna. Om du kollar på iframe kan du se att det fungerar:
