Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: UnicodeEncodeError στο Django στα ελληνικά

UnicodeEncodeError στο Django στα ελληνικά 6 Χρόνια 9 Μήνες πριν #4978

  • szoupi
  • Το Άβαταρ του/της szoupi
  • Αποσυνδεμένος
  • p_____
  • Δημοσιεύσεις: 3
Χαίρετε,
Έχω εγκαταστήσει το djangο, αλλά χτυπάει κάθε φορά που προσπαθώ να εισάγω δεδομένα στα ελλήνικά, είτε από το front end είτε από το /admin interface. Όσο και να το γκούγκλαρα δεν μπόρεσα να βρω μια λειτουργική λύση.
Κατανοώ ότι δεν μπορεί να διαβάσει τους ελληνικούς χαρακτήρες από το url, αλλά δεν έχω βρει τρόπο να το διορθώσω.
Υπάρχει κάποια πρόταση;



OS ubuntu 16.04
python version 2.7.12
Django Version: 1.10.2

UnicodeEncodeError at /admin/book/16/change/
'ascii' codec can't encode characters in position 0-7: ordinal not in range(128)

Request Method: GET
Request URL: http://127.0.0.1:8000/admin/book/16/change/
Django Version: 1.10.2
Exception Type: UnicodeEncodeError
Exception Value:

'ascii' codec can't encode characters in position 0-7: ordinal not in range(128)

Exception Location: /usr/local/lib/python2.7/dist-packages/Django-1.10.2-py2.7.egg/django/utils/encoding.py in force_text, line 80
Python Executable: /usr/bin/python
Python Version: 2.7.12
Python Path:

['/home/sz/apps/django/annotations',
'/usr/local/lib/python2.7/dist-packages/Django-1.10.2-py2.7.egg',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-x86_64-linux-gnu',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload',
'/home/sz/.local/lib/python2.7/site-packages',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages/gtk-2.0']
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

UnicodeEncodeError στο Django στα ελληνικά 6 Χρόνια 9 Μήνες πριν #4981

  • Αποστόλης
  • Το Άβαταρ του/της Αποστόλης
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 148
  • Ληφθείσες Ευχαριστίες 24
utf-8 codepage στο Ubuntu
και # -*- coding: utf-8 -*- στα py files (π.χ. views.py)
Πιθανώς να χρειαστεί και unicode(u"Πεδίο που σε ενδιαφέρει"), αναλόγως το version.

Θέλει να το ψάξεις λίγο.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

UnicodeEncodeError στο Django στα ελληνικά 6 Χρόνια 9 Μήνες πριν #4982

  • szoupi
  • Το Άβαταρ του/της szoupi
  • Αποσυνδεμένος
  • p_____
  • Δημοσιεύσεις: 3
Το έλυσα -εν μέρει- με τη χρήση της συνάρτησης __unicode__(self) στα views. Το πρόβλημα δημιουργούνταν από τη χρήση της συνάρτησης __str__(self) , αν δεν κάνεις χρηση αυτής δεν έχει θέμα. Επίσης επιλύεται και με τη χρήση της force_bytes().

Το πρόβλημα που αντιμετωπίζω τώρα ότι σε πεδία που είναι δηλωμένα ως κλειδιά (id) και στη διασύνδεση των μεταξύ τους πινάκων (4 πίνακες, ο ένας εξαρτώμενος από τον άλλο διαδοχικά), οι παραπάνω λύσεις δημιουργούν άλλα προβλήματα (πχ δεν εμβανίζουν το τελικό κείμενο) :(
Κάθε αρχή και δύσκολη :)

Όποιος έχει χρησιμοποιεί django στα ελληνικά και εισάγει δεδομένα από φόρμες, θα βοηθούσε να δημοσιεύσει παραδείγματα κώδικα από τα views

Κάθε βοήθεια ευπρόσδεκτη :)
#1η λυση
from django.utils.encoding import force_bytes
 
def __str__(self):
    return force_bytes(self.title)
 
 
#2η λύση
	def __unicode__(self):
        	return self.title
 
    def __str__(self):
        return self.title
        # 2nd solution:
        # return self.title.encode('utf8')
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

UnicodeEncodeError στο Django στα ελληνικά 6 Χρόνια 9 Μήνες πριν #4983

  • Αποστόλης
  • Το Άβαταρ του/της Αποστόλης
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 148
  • Ληφθείσες Ευχαριστίες 24
Λίγο περίεργη μου φαίνεται αυτή η λύση...
Πάντως εγώ σε όσα Django applications έχω φτιάξει δεν είχα τέτοια προβλήματα. Αν ο host, τα py files και η database έχουν utf-8, δεν χρειάζονται αλχημείες ούτε στα views ούτε στα html files.

Εναλλακτικά μπορείς να χρησιμοποιήσεις το import unicode_litterals το οποίο είναι για python 2. Δεν ξέρω όμως αν σου κάνει και μέχρι ποιά έκδοση δουλεύει. Το Django έχει κάποια θέματα με compatibility των versions του.

Όσον αφορά την διασύνδεση των πινάκων, το Django είναι λίγο δύσχρηστο για να πάρεις πάνω από δύο πίνακες που συνδέονται μεταξύ τους.
Καλύτερα να κάνεις custom query, αλλιώς θα πέρνεις αρχικά τους πίνακες 1-2, μετά τους 2-3 κ.ο.κ. μεχρι να φτάσεις στο επιθυμητό επίπεδο.

Για custom query,κάτι σαν κι αυτό:
TABLE_NAME.objects.raw("SELECT ... INNER JOIN ... ON ...")

Υπάρχει κι αυτή η εναλλακτική:
from django.db.models import Q
question =  TABLE_NAME.objects.filter(Q(lastname__contains=searchText)| 
			Q(firstname__contains=searchText) | 
			Q(phone1__contains=searchText)
TABLE_NAME.objects.select_related("YOUR FOREIGN KEY")
Κι εδώ όμως δεν ξέρω τι παίζει με το version compatibility.
Τελευταία διόρθωση: 6 Χρόνια 9 Μήνες πριν από Αποστόλης.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": szoupi

[ΕΠΙΛΥΘΗΚΕ] UnicodeEncodeError στο Django στα ελληνικά 6 Χρόνια 9 Μήνες πριν #4985

  • szoupi
  • Το Άβαταρ του/της szoupi
  • Αποσυνδεμένος
  • p_____
  • Δημοσιεύσεις: 3
Λύθηκε οριστικά αντικαθιστώντας την __str__(self) με τη __unicode__(self) . Σύμφωνα με την τεκμηρίωση "the Model base class automatically derives __str__() from ` __unicode__()`_ by encoding to UTF-8"
docs.djangoproject.com/en/1.11/topics/py...-and-unicode-methods

Δεν υπάρχει λόγος για force_bytes() κτλ.

Ευχαριστώ για τη βοήθειά σας
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.293 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου