سلام استاد عزیز،
من در پروژه جنگو با یک مشکل مواجه شدم که هنوز حل نشده. بررسی کردم و دیدم افراد دیگه هم مشکل مشابهی داشتن، اما با راهکارهایی که ارائه شده بود، مشکل من برطرف نشد.
مشکل اینه که وقتی از لینکهای فارسی برای نمایش جزئیات محصولات استفاده میکنم، خطای 404 دریافت میکنم، اما لینکهای انگلیسی بدون مشکل باز میشن.
روی لوکال هاست این مشکل وجود نداره و همه لینکها به درستی کار میکنن، اما روی هاستی که خریداری کردم، لینکهای فارسی دچار مشکل هستن.
بررسی کردم که URLs در فایل urls.py به درستی تعریف شدن و قابلیت پشتیبانی از یونیکد رو دارن.
پیشنهاد شد که در فایل .htaccess این خط رو اضافه کنم:
AddDefaultCharset UTF-8
این کار رو انجام دادم ولی تغییری ایجاد نشد.
مطمئن شدم که DATABASE، Encoding رو روی UTF-8 داره و دادهها به درستی ذخیره میشن.
بررسی کردم که آیا Middleware مرتبط با Locale یا Unicode نیازی به تغییر داره یا نه، اما چیزی پیدا نکردم که مستقیماً باعث این مشکل بشه
ممنون میشم اگر پیشنهادی دارین که بتونه کمک کنه.
سلام خدمت شما دوست عزیز
معمولا این مشکل روی وب سرورها ایجاد میشه دوست من و خیلی شاید به پروژه شما مرتبط نباشه
چندین عامل ممکنه این مشکل رو ایجاد کنه.
1 ) تنظیمات وب سرور به گونه ای تنظیم شده باشه که encoding کاراکتر های فارسی رو به درستی متوجه نشه که برای این مورد اگر هاست اشتراکی باشه عملا نمیشه کار خاصی انجام داد و باید از سرورهای اختصاصی استفاده کنین
2 ) زمانی که جنگو روی سرور نصب میشه ، تنظیمات encoding اون روی utf-8 نباشه یا کاراکترهای فارسی دو بار decode بشن که باعث ایجاد مشکل میشه.
در کل برای این که مشکلات این چنینی براتون ایجاد نشن پیشنهاد میکنم از nginx به عنوان وب سرور استفاده کنین دوست من
برای سرور فعلیتون پیشنهاد میکنم در venv وارد site_packages بشین، جنگو رو پیدا کنین و مسیر زیر رو طی کنین :
django > core > handlers > wsgi.py
درون این فایل یک متد هستش که اسمش get_bytes_from_wsgi هست
در خروجی این متد به جای iso-8859-1 از utf-8 استفاده کنین و چک کنین
معمولا این روش جواب میده اما اگر مشکل پابرجا بود ، به ناچار پیشنهاد میکنم از nginx استفاده کنین
سعی میکنم یک آموزش برای پابلیش پروژه روی لینوکس و nginx در سایت منتشر کنم که بتونین ازش استفاده کنین
موفق باشین :)