Описание проблемы:
1] У меня есть модель со свойствами страны и города
class UserReportedData(db.Model):
#country selected by the user, this will also populate the drop down list on the html page
country = db.StringProperty(default='Afghanistan',choices=['Afghanistan','Aring land
Islands','Albania'])
#city selected by the user
city = db.StringProperty()
Связанная форма
class UserReportedDataForm(djangoforms.ModelForm):
class Meta:
model = UserReportedData
2] С помощью stackoverflow (спасибо Крису, опубликовавшему: GeoIP с google app engine и python ), я выяснил, как использовать javascript на html-странице, чтобы узнать страну и город для Пользователь. Следующий код успешно может распечатать значения страны и города на странице
<!-- including the geoip javascript library -->
<script
src="http://j.maxmind.com/app/geoip.js"
type="text/javascript">
</script>
<script type="text/javascript">
if (window.geoip_country_name) {
document.write(geoip_country_name())
document.write(geoip_city())
}
</script>
3] Теперь, когда отображается страница, текстовое поле страны и города и значения по умолчанию поступают из формы django (извините, я не могу опубликовать изображение из-за ограничений)
Вопрос:
Я хочу, чтобы данные о стране и городе пользователя были заполнены в текстовом поле страны и города. Итак, каким-то образом форма или модель python должна вызывать код javascript и получать данные о стране и городе для пользователя.
Спасибо
[EDIT # 1] Редактировать на основе подхода, предложенного @ Haochi
Ниже приведены идентификаторы, сгенерированные djangoforms
<select name="country" id="id_country">
<input type="text" name="city" id="id_city" />
Попробовал следующий javascript на html-странице
<script type="text/javascript">
if (window.geoip_country_name) {
document.getElementById("id_country").value = geoip_country_name();
document.getElementById("id_city").value = geoip_city();
document.write("this is a javasctipt print"); /* this prints properly*/
document.write(document.getElementById("id_country").value);
document.write(document.getElementById("id_city").value);
}
</script>
Это, однако, не заполнило значения для текстовых полей id_country и id_city соответственно.
[EDIT # 3] Так выглядит HTML-файл. Теперь я переместил расчет GEOIP со стороны сервера на сторону клиента
<!-- Text box for city, later on in the design this will be a drop down box -->
<p> Select City: </p>
<div>
<input type="text" name="city" id="city">
<!-- By default, we will select users city -->
<script type="text/javascript" language="JavaScript">
document.getElementById("city").value = geoip_city()
</script>
</div>
<p> Select Country: </p>
<select name="selCountry" id="country">
<!-- By default, we will select users country -->
<script type="text/javascript" language="JavaScript">
document.write("<option value=\"" + geoip_country_name() + "\" selected>"
</script>
<option value="United States">
United States
</option>
<option value="United Kingdom">
United Kingdom
</option>
Полагаю, что лучше всего перенести весь javascript в отдельный файл, мне нужно попробовать это и соответствующим образом изменить HTML-код.