Trzy rzeczy, o których wspominasz, że są wspólne, marka, model, rok, byłyby 3 wartościami wejściowymi. Po przekazaniu serwerowi obiekt zawierający szczegóły zostanie zwrócony na stronę wywołującą. Ta strona przeanalizuje szczegóły obiektu (przy użyciu JavaScript) i zaktualizuje interfejs użytkownika, aby wyświetlić je użytkownikowi.
Ze strony Django potrzebne są urządzenia do pobierania 3 wejść i zwracania danych wyjściowych. Ze strony klienta musi istnieć możliwość przekazania 3 wejść do serwera, a następnie odpowiednie przeanalizowanie odpowiedzi serwera.
Istnieje framework REST API dla Django, który ułatwia dodanie "api" wspomnianego powyżej - Piston. Używając tłoków, wystarczy utworzyć adres URL dla tego zasobu, a następnie dodać program obsługi, aby go przetworzyć. (Będziesz jeszcze trzeba przejrzeć dokumentację tłok, ale to powinno dać ci pomysł, jak to wygląda)
urls.py:
vehicle_details = Resource(handler=VehicleDetails)
url(r'^vehicle/(?<make>.*)/(?<model>.*)/(?<year\d{2,4}/(?P<emitter_format>[a-z]{1,4}), vehicle_details, name='vehicle_details'),
handler.py:
class VehicleDetails(BaseHandler):
methods_allowed = ('GET',)
model = Vehicles #whatever your Django vehicle model is
def read(self, request, *args, **kwargs):
# code to query the DB and select the options
# self.model.objects.filter()...
# Build a custom object or something to return
return custom_object
To po prostu ustawia www.yoursite.com/vehicle/[make]/ url [model]/[rok]/json w celu zwrócenia niestandardowego obiektu danych w JSON do przeanalizowania przez jquery.
Po stronie klienta można użyć jquery do skonfigurowania zdarzenia (bind), aby po wybraniu wszystkich 3 dropdownów wykonywał on znak $ .get() na adres URL api. Kiedy otrzyma ten wynik z powrotem, przekazuje go do analizatora składni JSW JSON i nadaje obiekt niestandardowy jako obiekt javascript. Obiekt ten mógłby następnie zostać użyty do wypełnienia większej liczby rozwijanych menu.
(Big ostrzeżenie, po prostu pisał poza czubek mojej głowy, więc to nie jest przeznaczone do kopiowania i wklejania. To tylko dla ogólnej idei.)
<script type="text/javascript">
// On document load
$(function() {
$('#dropdown_make').bind('change', checkForValues());
$('#dropdown_model').bind('change', checkForValues());
$('#dropdown_year').bind('change', checkForValues());
});
function checkForValues() {
if ($('#dropdown_make').val() && $('#dropdown_model').val() && $('#dropdown_year').val())
updateOptions();
}
function updateOptions() {
url = '/vehicle/';
url += $('#dropdown_make').val() + '/';
url += $('#dropdown_model').val() + '/';
url += $('#dropdown_year').val() + '/';
url += 'json/';
$.get(url, function(){
// Custom data object will be returned here
})
}
</script>
Nie ten sam facet ... po prostu próbujemy rozwiązać ten sam problem ... dzięki za link, wygląda mi to na dobry początek. –
Jestem facetem, a to jest niesamowite :) – Dustin